Элемент Recyclerview onClick, чтобы установить изображение, нажатое в контейнере ImagemView - PullRequest
0 голосов
/ 09 мая 2020

Решение моей проблемы должно быть простым, но я все равно не могу его разблокировать. Я видел здесь несколько похожих проблем, но поскольку я только новичок, у меня возникают проблемы с реализацией предлагаемых решений в моем конкретном случае c, который выглядит следующим образом:

это мой пользовательский интерфейс , представляющий мою проблему

My ImoClass: publi c class ImoClass {

private int imo;

public ImoClass(int imoj) {this.imo = imoj;}
   public int getImo() {return imo;}

My RecyclerViewAdapater: publi c класс ImoAdapterCLICK расширяет RecyclerView.Adapter {

public class MeuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public ImageView imagem, emoji;



    public MeuViewHolder(View itemView) {
        super(itemView);
        imagem = itemView.findViewById(R.id.imagem_item);
        itemView.setOnClickListener(this);

        emoji=itemView.findViewById(R.id.imagem_select);

    }

    @Override
    public void onClick(View v) {


        //TODO: show image clicked in ImageView "emoji"
       // I have tested this: emoji.setImageResource(objetoClicked.getImo()) but without success !!



    }
}

private final ArrayList<ImoClass> meusItems;
public ImoAdapterCLICK(ArrayList<ImoClass> arrayList) {
    this.meusItems = arrayList;
}

@Override
public MeuViewHolder onCreateViewHolder(ViewGroup parent, int i) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_grid, parent, false);
    MeuViewHolder viewHolder = new MeuViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(MeuViewHolder holder, int position) {
    ImoClass objeto = meusItems.get(position);
    holder.imagem.setImageResource(objeto.getImo());

}

@Override
public int getItemCount() {
    return meusItems.size();
}

}

My "MainActivity": publi c класс ImoRecyclerViewCLICK расширяет AppCompatActivity {

private RecyclerView recyclerView;
private ImoAdapterCLICK adapter;
public ArrayList<ImoClass> meusItems;
private GridLayoutManager layoutManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_imo_grid);

    recyclerView = findViewById(R.id.recycler);
    layoutManager = new GridLayoutManager(this, 5);
    recyclerView.setLayoutManager(layoutManager);

    meusItems = new ArrayList<>();
    ImoClass item1 = new ImoClass(R.mipmap.imo1);
    ImoClass item2 = new ImoClass(R.mipmap.imo2);
    ...
    ImoClass item2 = new ImoClass(R.mipmap.imo30);

    meusItems.add(item1);
    meusItems.add(item2);
    ...
    meusItems.add(item30);

    adapter = new ImoAdapterCLICK(meusItems);
    recyclerView.setAdapter(adapter);
}

}

Я очень ценю любую помощь. Спасибо!! Вы мне очень помогли !!

1 Ответ

0 голосов
/ 09 мая 2020

Насколько я понимаю вопрос, сделайте это в onBindViewHolder:

@Override
public void onBindViewHolder(MeuViewHolder holder, int position) {
    ImoClass objeto = meusItems.get(position);
    holder.imagem.setImageResource(objeto.getImo());

    //on click image
    holder.imagem.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view){

    //set the image clicked in emoji view

    holder.emoji.setImageResource(objeto.getImo());

    }

    });

}

Удалите эту строку из MeuViewHolder

itemView.setOnClickListener(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...