[解決済み] RecyclerViewでクリックされた項目とその位置を取得する
2022-08-26 22:31:15
質問
私の
ListView
を
RecyclerView
で、リストが表示されるのはいいのですが、クリックされた項目とその位置を取得する方法を知りたいと思います。
OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
で使用している
ListView
.
アイデアありがとうございます!
どのように解決するのですか?
リンクを元に なぜRecyclerViewはonItemClickListener()を持っていないのですか? とRecyclerViewはどのようにListviewと違うのですか? というリンクと@Duncanの一般的なアイデアに基づいて、ここに私の解決策を示します。
-
1つのインターフェイスを定義する
RecyclerViewClickListener
へのメッセージの受け渡しに使用します。Activity
/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()); } } }
テスト後、正常に動作しています。
[ UPDATE ]
API22から
RecyclerView.ViewHolder.getPosition()
は非推奨なので、代わりに
getLayoutPosition()
.
関連
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] スクロールすると背景のListViewが黒くなる
-
[解決済み】RecyclerView Adapterのデータを更新する方法
-
[解決済み】RecyclerViewをスクロールして、選択したアイテムを一番上に表示させる。
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?