1

I'm having some problems trying to implement an Onclick Method on my Recyclerview. I have a list that displays an icon and the title. I know how to go from one activity to another but I don't know where should I put it. This is my Adapter. I was trying to imlpement Onclick on the image icon, should I do it the same way I did with the delete icon? Thanks!

ublic class MyAdapter extends RecyclerView.Adapter<MyAdapter.ExampleViewHolder> {
private  ArrayList<listaMat> matArrayList;
private OnItemClickListener mListener;

public  interface  OnItemClickListener {
    void onItemClick(int position);
    void onDeleteClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener){
    mListener = listener;
}

public static class  ExampleViewHolder extends RecyclerView.ViewHolder{
    public ImageView mImageview;
    public TextView mTextView;
    public ImageView mDeleteImg;

    public ExampleViewHolder(View itemView, OnItemClickListener listener) {
        super(itemView);
        mImageview = itemView.findViewById(R.id.img_list);
        mTextView = itemView.findViewById(R.id.txt_list);
        mDeleteImg = itemView.findViewById(R.id.img_delete);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null){
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION){
                        listener.onItemClick(position);
                    }
                }
            }
        });

        mDeleteImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null){
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION){
                        listener.onDeleteClick(position);
                    }
                }
            }
        });
    }

}

public MyAdapter(ArrayList<listaMat> listaMateri) {
    matArrayList = listaMateri;
}

@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista_mat, parent, false);
    ExampleViewHolder evh = new ExampleViewHolder(V, mListener);
    return evh;
}

@Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
    listaMat currentItem = matArrayList.get(position);

    holder.mImageview.setImageResource(currentItem.getmImageResource());
    holder.mTextView.setText(currentItem.getmText());
}

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

}

  • what is your exact problem, what isn't working? from code everything looks fine. if you just want to set clickable icon instead of whole item just exchnage setter: `itemView.setOnClickListener(` to `mImageview.setOnClickListener(` – snachmsm Jan 11 '22 at 21:52

3 Answers3

0
  1. if you want to use it here

     holder.mImageview.setOnClickListener(v -> {
                 Intent intent = new Intent(holder.mImageview.getContext(), MainDownload.class);
                 holder.mImageview.getContext().startActivity(intent);
    
             }
    
  2. if you want to use it with interface do this

     public class exampler extends AppCompatActivity , MyAdapter.OnItemClickListener {
    

    }

Manjeet deswal
  • 692
  • 2
  • 5
  • 18
0

Use this code in your MainActivity where you are using recyclerview. You can find the full example here

mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // Do Something
            }

            @Override
            public void onDeleteClick(int position) {
                // Do Something
            }
        });
Yaqoob Bhatti
  • 1,271
  • 3
  • 14
  • 30
0
 @Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
    listaMat currentItem = matArrayList.get(position);
    holder.mImageview.setImageResource(currentItem.getmImageResource());
    holder.mTextView.setText(currentItem.getmText());
    holder.mImageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null){
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION){
                        listener.onItemClick(position);
                    }
                }
            }
        });
}