我将ListView替换为RecyclerView,列表显示为ok,但我想知道如何获取被点击的项目及其位置,类似于我们在OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)中使用的 ListView 方法。

感谢您的想法!

最佳答案

基于链接:Why doesn't RecyclerView have onItemClickListener()? and How RecyclerView is different from Listview?,还有@Duncan的一般想法,我在这里给出我的解决方案:

  • 为从适配器到RecyclerViewClickListener/Activity的传递消息定义一个接口(interface)Fragment:
      public interface RecyclerViewClickListener {
          public void recyclerViewListClicked(View v, int position);
      }
    
  • Activity/Fragment中实现接口(interface),并将监听器传递给适配器:
      @Override
      public void recyclerViewListClicked(View v, int position){... ...}
    
      //set up adapter and pass clicked listener this
      myAdapter = new MyRecyclerViewAdapter(context, this);
    
  • AdapterViewHolder中:
      public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ItemViewHolder> {
         ... ...
         private Context context;
         private static RecyclerViewClickListener itemListener;
    
    
         public MyRecyclerViewAdapter(Context context, RecyclerViewClickListener itemListener) {
             this.context = context;
             this.itemListener = itemListener;
             ... ...
         }
    
    
         //ViewHolder class implement OnClickListener,
         //set clicklistener to itemView and,
         //send message back to Activity/Fragment
         public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
             ... ...
             public ItemViewHolder(View convertView) {
                 super(convertView);
                 ... ...
                 convertView.setOnClickListener(this);
             }
    
             @Override
             public void onClick(View v) {
                 itemListener.recyclerViewListClicked(v, this.getPosition());
    
             }
         }
      }
    

  • 经过测试,它工作正常。
    [ UPDATE ]
    从API 22开始,不推荐使用RecyclerView.ViewHolder.getPosition(),因此不推荐使用getLayoutPosition()

    关于android - 获取点击的项目及其在RecyclerView中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28296708/

    10-12 05:36