私は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);
および:
Adapter
ViewHolder
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()
。