diadia

興味があることをやってみる。自分のメモを残しておきます。

RecyclerView 各要素をタップして画面遷移させる

実装概要

  1. RecyclerViewを実装する。
  2. View.OnClickListenerでタップ時の画面遷移ロジックを記述する。ここについてはcontextの記述の仕方を学んだ。
  3. 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)
    }