ListViewの要素をタップした時の動作を追加しました。
作るもの
前回の記事で作成したListViewに対し、タップイベントを追加しました。環境
このコードは以下の環境で書いています。
- macOS 10.14.2(Mojave)
- Android Studio 3.2.1
- Android SDK 28
- gradle 4.6
事前準備
前回の記事の成果物を使います。
レイアウトファイル
前回の記事で利用したものを使います。
Activityファイル
Java1class ListviewActivity: AppCompatActivity() { 2 override fun onCreate(savedInstanceState: Bundle?){ 3 super.onCreate(savedInstanceState) 4 setContentView(R.layout.listview_activity) 5 6 val heroes:Array<String> = arrayOf("Iron Man", "Captain America", "Thor") 7 val realName:Array<String> = arrayOf("Tony Stark", "Steve Rogers", "Thor Odinson") //追加[1] 8 9 val adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, heroes) 10 val lvHeroes: ListView = findViewById(R.id.lvHeroes) 11 12 lvHeroes.adapter = adapter 13 14 /* 15 追加[2] 16 引数は「parent」、「view」、「position」、「id」の4つで、 17 使用しない引数については「_(アンダースコア)」で省略出来る。 18 */ 19 lvHeroes.setOnItemClickListener{ _, _, position, _ -> 20 //タップされたアイテムの位置(Position)をインデックスに配列の中身をToastで表示 21 Toast.makeText(this,realName[position],Toast.LENGTH_SHORT).show() 22 } 23 } 24} 25
コードの説明に入ります。
[1]
Java1val realName:Array<String> = arrayOf("Tony Stark", "Steve Rogers", "Thor Odinson") //追加 2
新たに配列を宣言しました。 本来ならばHashMapを用いてheroes
の要素と一致した
オブジェクトを作るのが望ましいですが、今回は単純にしました。
[2]
Java1lvHeroes.setOnItemClickListener{ _, _, position, _ -> } 2
setOnLitemClickListener
を使って、ListView内の単要素をタップされた際の
アクションイベントを定義しています。
コメントの通り、引数は4つ指定する必要がありますが、Kotlinの場合は_
で省略出来ます。
今回はposition
という、どの要素がタップされたかを判断する為に使う引数を
使用しています。
リンク
次の記事
【Android App with Kotlin #5】RecyclerViewを使う
前回の記事
【Android App with Kotlin #3】ListViewを使う
/以上
よかったらシェアしてください!