カテゴリー: Android

【Kotlin】RecyclerViewAdapterを使ってリスト表示

はじめに

こんにちは。miyagawaです。
RecyclerViewを使ってリスト表示をしているのですが、いくつか詰まった点があったので備忘録としてまとめたいと思います。
かなり基礎的なものですが、なんどもつまづいてしまうと時間のロスだな、と感じています。
今回もKotlinで書いていきます。

GradleファイルにRecyclerViewの設定を追加する

gradle(app)ファイルにRecyclerViewの設定を追記します。
dependencesの中に追記してください。

dependencies {
    ...
    implementation 'androidx.recyclerview:recyclerview:1.0.0' // 追記
    ...
}

レイアウトファイルの作成

まずはMainActivityのレイアウトにRecyclerViewを追加します。
先ほどのgradleファイルに設定を追加していないとエラーが出るのでご注意ください

次に、RecyclerViewの中身(1行分)のレイアウトファイルを作成します。
ここで注意するべき点は、LinearLayoutを必ずルートのレイアウトとして使用することです。
後ほど設定するLinearLayoutManagerというRecyclerViewに設定するものがあるのですが、これがないと正常に動作しません。

Adapterクラスの追加

レイアウトファイルの設定が完了したところで、次はSampleListItemAdapterのktファイルに追記していきます。

internal class SampleListItemAdapter(private var context: Context) :
    RecyclerView.Adapter() {

    private var mSampleItems: List = listOf()

    fun setSampleList(sampleItems: List) {
        mSampleItems = sampleItems
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val sampleView = LayoutInflater.from(parent.context)
            .inflate(R.layout.list_item_sample, parent, false)
        return SampleListHolder(sampleView)
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        (holder as SampleListHolder).bind(
            context,
            mSampleItems.get(position)
        )
    }

    override fun getItemCount(): Int {
        return mSampleItems.size
    }

    private inner class SampleListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val sampleTextView: TextView

        init {
            sampleTextView = itemView.findViewById(R.id.textViewSample)
        }

        internal fun bind(context: Context, sampleText: String) {
            sampleTextView.text = sampleText
        }
    }
}

Activityファイルへの追加

最後にMainActivityにAdapterの設定を行います。
LinearLayoutManagerの設定忘れにご注意ください。

class MainActivity : AppCompatActivity() {
    private lateinit var sampleListAdapter: SampleListItemAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        sampleListAdapter = SampleListItemAdapter(this)

        var list = listOf("おはようございます", "こんにちは", "こんばんは")
        sampleListAdapter.setSampleList(list)

        // 注意:このLinearLayoutManagerがないと正常に動作しません。
        val linearLayoutManager = LinearLayoutManager(this)
        linearLayoutManager.orientation = LinearLayoutManager.VERTICAL

        recyclerView.layoutManager = linearLayoutManager
        recyclerView.adapter = sampleListAdapter
        
    }
}

さいごに

今回はRecyclerViewの備忘録を書きました。
毎回LinearLayoutManagerの設定を忘れてしまうので、しっかり覚えておきたいと思います。

おすすめ書籍

miyagawa

シェア
執筆者:
miyagawa
タグ: KotlinAndroid

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前