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