お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2019-01-20

【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ファイル

Java
1class 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]

Java
1val realName:Array<String> = arrayOf("Tony Stark", "Steve Rogers", "Thor Odinson") //追加
2

新たに配列を宣言しました。 本来ならばHashMapを用いてheroesの要素と一致した オブジェクトを作るのが望ましいですが、今回は単純にしました。

[2]

Java
1lvHeroes.setOnItemClickListener{ _, _, position, _ -> }
2

setOnLitemClickListenerを使って、ListView内の単要素をタップされた際の アクションイベントを定義しています。

コメントの通り、引数は4つ指定する必要がありますが、Kotlinの場合は_で省略出来ます。 今回はpositionという、どの要素がタップされたかを判断する為に使う引数を 使用しています。

リンク

次の記事

【Android App with Kotlin #5】RecyclerViewを使う

前回の記事

【Android App with Kotlin #3】ListViewを使う

/以上

よかったらシェアしてください!