情報を一覧表示できるListViewの使い方とクリックイベントを実装方法を紹介します。何かしらの選択画面や設定操作画面、データの一覧表示時などで活躍します。
ListViewで要素を一覧表示
ListViewに要素を設定するにはAdapterクラスを活用します。ListViewにデータを表示する手順は以下の通り。
- リストデータの用意。
- リストデータを用いてAdapterオブジェクトの生成
- ListViewにAdapterオブジェクトを反映させる
AdapterにはListViewの各行に表示させるデータを管理する役割があるようです。
サンプルコード
画像のようなListViewを表示するサンプルを作成します。

xmlは以下の通り(見やすさの都合で背景色を設定してます)。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/lvSample"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_margin="10dp"
android:background="#eee"/>
</LinearLayout>
Kotlinは以下の通り。
class MainActivity : AppCompatActivity(),AdapterView.OnItemClickListener {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
// 1.リストビュー用のリストデータを作成
var tvElement = mutableListOf<String>("AAA", "BBB", "CCC")
// 2.アダプタオブジェクトの生成
val adapter = ArrayAdapter(applicationContext, android.R.layout.simple_list_item_1, tvElement)
// 3.リストビューにアダプタオブジェクトを設定
binding.lvSample.adapter = adapter
}
}
ListViewをクリックできるようにする
ボタンと似たような方法でListViewのタップイベントを設定できます。
今回はタップされた行の要素をトーストで表示するサンプルを作成しました。
onCreate内にクリックリスナの設定を追記、またクリックリスナクラスを追記します。
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
/*-------- 省略 --------*/
// リストビューのクリックリスナを設定
val listItemClickListener = ListItemClickListener()
binding.lvSample.onItemClickListener = ListItemClickListener()
}
// リストビューのクリックリスナクラス
private inner class ListItemClickListener : AdapterView.OnItemClickListener{
override fun onItemClick(parent: AdapterView<*>?, v: View?, position: Int, id: Long) {
// タップされた要素の取得
val item = parent?.getItemAtPosition(position) as String
//確認用Toast
Toast.makeText(applicationContext, "Touch ->:"+item,Toast.LENGTH_SHORT).show()
}
}
}
タップすると以下のようなトーストが表示されます。

さいごに
今回のListViewなどのリスト系GUIは、情報の一覧や選択肢を多数表示するのに向いていますね。
データを扱うソフトのGUIでは活躍します。
↓自分がハマったListView反応しない現象について
↓ListViewの行要素をカスタマイズする方法




コメント