Maria Alexandra
Maria Alexandra

Reputation: 1

Recyclerview item onClick to set the image clicked in a ImagemView container

The solution to my problem must be simple, but I still can't unlock it. I have seen some similar issues here, but because I am only a beginner, I am having problems implementing the suggested solutions, in my specific case which is the following:

this is my UI, representing my issue

My ImoClass: public class ImoClass {

private int imo;

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

My RecyclerViewAdapater: public class ImoAdapterCLICK extends 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": public class ImoRecyclerViewCLICK extends 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);
}

}

I really appreciate any help. Thank you!! You've been a great help to me!!

Upvotes: 0

Views: 74

Answers (1)

Hasan Bou Taam
Hasan Bou Taam

Reputation: 4035

According to how I understand the question, do this in 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());

    }

    });

}

Remove this line from MeuViewHolder

itemView.setOnClickListener(this);

Upvotes: 0

Related Questions