【问题标题】:Implement Onclick in Recyclerview [duplicate]在 Recyclerview 中实现 Onclick [重复]
【发布时间】:2022-01-11 21:45:23
【问题描述】:

我在尝试在我的 Recyclerview 上实现 Onclick 方法时遇到了一些问题。我有一个显示图标和标题的列表。我知道如何从一项活动转到另一项活动,但我不知道应该把它放在哪里。这是我的适配器。我试图在图像图标上实现 Onclick,我应该像使用删除图标那样做吗?谢谢!

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();
}

}

【问题讨论】:

  • 您的确切问题是什么,什么不起作用?从代码看起来一切都很好。如果您只想设置可点击图标而不是整个项目,只需交换设置器:itemView.setOnClickListener(mImageview.setOnClickListener(

标签: java android android-recyclerview


【解决方案1】:

在您使用 recyclerview 的 MainActivity 中使用此代码。你可以找到完整的例子here

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

            @Override
            public void onDeleteClick(int position) {
                // Do Something
            }
        });

【讨论】:

    【解决方案2】:
    1. 如果你想在这里使用它

       holder.mImageview.setOnClickListener(v -> {
                   Intent intent = new Intent(holder.mImageview.getContext(), MainDownload.class);
                   holder.mImageview.getContext().startActivity(intent);
      
               }
      
    2. 如果你想在界面中使用它,请这样做

       public class exampler extends AppCompatActivity , MyAdapter.OnItemClickListener {
      

      }

    【讨论】:

      【解决方案3】:
       @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);
                          }
                      }
                  }
              });
      }
      

      【讨论】:

      • 非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多