RecyclerView 各要素をタップして画面遷移させる
実装概要
- RecyclerViewを実装する。
- View.OnClickListenerでタップ時の画面遷移ロジックを記述する。ここについてはcontextの記述の仕方を学んだ。
- onCreateViewHolderメソッドのオーバーライドの内容にリスナーを記述する。
RecyclerViewの実装
親レイアウト、子レイアウト、Activity(.ktファイル)を記述する。
Activity(.ktファイル)では、onCreateメソッドでrecyclerviewのインフレイトの実行を行う。RecyclerView.Adapterメソッドを継承したクラス内で、onCreateviewHolderメソッドをオーバーライドする。
onBindViewHolderで各ViewHolderインスタンスの各属性にテキスト等を設定する。具体的には以下を見る。
http://torajirousan.hatenadiary.jp/entry/2020/01/18/234932
View.onClickListenerクラスの継承でリスナーを生成する
リスナーは以下のように記述する。
private inner class ItemClickListener : View.OnClickListener{ override fun onClick(view : View){ // 詳細ページを遷移させるロジックを記述する var context = view.context context.startActivity(Intent(context, DetailActivity::class.java)) } }
RecyclerViewの各要素をタップして画面遷移させる方法については悩んだが以下を参考にして上記のコードを記述するに至った。
参考:
https://www.raywenderlich.com/1560485-android-recyclerview-tutorial-with-kotlin
val context = itemView.context val showPhotoIntent = Intent(context, PhotoActivity::class.java) showPhotoIntent.putExtra(PHOTO_KEY, photo) context.startActivity(showPhotoIntent)
onCreateViewHolderメソッドのオーバーライドの内容にリスナーを記述する
return viewholderインスタンスの前にリスナーをセットすれば良い。
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.MyViewHolder { // create a new view val rowView = LayoutInflater.from(parent.context) .inflate(R.layout.list_item, parent, false) //以下のようにリスナーを設定する rowView.setOnClickListener(ItemClickListener()) return MyViewHolder(rowView) }