[Kotlin] ListViewの表示と選択処理

私の著書のAndroid SDKポケットリファレンスでまだ対応できていないKotlin化ですが、業務でも利用される機会が多くなってきているかと思います。
少しでもお役に立てるように、Kotlin化した場合にどのように書いていくのかを紹介していくコーナー。
今日はListViewを取り上げておきたいと思います。

現在でしたらリスト表示を行いたい場合には RecyclerView を用いるほうが一般的かと思いますが、カスタマイズ不要な簡単なリスト表示を行うことに限定するのであれば、ListViewもまだ利用できるシーンがあるかもしれません。
初めてAndroidを触っていく人にリストを知ってもらう取っ掛かりとして、ListViewを紹介したいと思います。

サンプル

まずサンプルですが、今回のサンプルは以下にまとめてあります。

レイアウトの用意

まずはレイアウトの用意です。画面全体にListViewを表示をするように定義しています。
res/layout/activity_main.xml

<ListView
    android:id="@+id/list_view"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

リストの項目設定

続いてリストの項目設定です。このサンプルではわかりやすくするために、 MainActivity に直接記述するようにしています。
src/MainActivity.kt

val pokemonNames = listOf("フシギダネ", "フシギソウ", "フシギバナ",
        "メガフシギバナ", "ヒトカゲ", "リザード", "リザードン", "メガリザードンX",
        "メガリザードンY", "ゼニガメ", "カメール", "カメックス", "メガカメックス", "キャタピー",
        "トランセル", "バタフリー", "メガスピアー", "ポッポ")
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, pokemonNames)

val listView: ListView = findViewById(R.id.list_view)
listView.adapter = adapter

listOf()でStringのリストを用意し、ArrayAdapterを生成しています。
そして、画面に表示するListViewに対してadapterをバインディングしてやれば、文字列が画面上に表示されます。

実行結果

実行結果は以下のような感じです。

クリック処理も合わせて追加

上記でListViewが表示できるようになりましたが、できたら項目がクリックされたことも検知できる方が良いでしょう。
クリック処理を検知したい場合には、setOnItemClickListernerを使って以下のようなコードを追加します。

listView.setOnItemClickListener { adapterView, _, position, _ ->
    val pokemonName = adapterView.getItemAtPosition(position) as String
    Toast.makeText(this, "$pokemonName が現れた!", Toast.LENGTH_SHORT).show()
}

このようなコードを追加することでListView上のクリックが行われる毎にトーストが表示される仕組みとなります。

以上がListViewでの基本的な表示方法になります。
しかし、RecyclerViewが用意されていますので、本来はそちらを積極的に使っていくようにしましょう。

まとめ

以上がListViewの紹介となりました。
Kotlinで紹介し直してみると、色々伝えておくべきことを思い出していくので、知見を整理するためにもどんどん書いていきたいと思います。

「[Kotlin] ListViewの表示と選択処理」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください