RecyclerView でクリックされたアイテムとその位置を取得する 質問する

RecyclerView でクリックされたアイテムとその位置を取得する 質問する

私はListViewを に置き換えていますがRecyclerView、リストは正常に表示されていますが、クリックされたアイテムとその位置を取得する方法を知りたいです。OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)で使用しますListView

アイデアをありがとう!

ベストアンサー1

リンクに基づいて:RecyclerView に onItemClickListener() がないのはなぜですか? また、RecyclerView と Listview の違いは何ですか?、そして@Duncanの一般的なアイデアに基づいて、私の解決策をここに示します。

  • RecyclerViewClickListenerアダプタからActivity/にメッセージを渡すためのインターフェースを 1 つ定義しますFragment

      public interface RecyclerViewClickListener {
          public void recyclerViewListClicked(View v, int position);
      }
    
  • Activity/でFragmentインターフェースを実装し、アダプタにリスナーも渡します。

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

テスト後、正常に動作します。

[アップデート]

API 22 以降では はRecyclerView.ViewHolder.getPosition()非推奨になったため、代わりに を使用しますgetLayoutPosition()

おすすめ記事