AndroidStudio リストデータが「固定」と「不変」の違い


この記事では、超初心者な私が超初心者向けに書いた内容になっています。

さて、今回はアンドロイドアプリのリストデータを設定する時の方法について、まとめました。
なお、データを扱う上で基本的にはDBとの接続を図りますが、今回は、文字列としてデータを扱う場合と、kotlinファイルに記述してリストデータを扱う方法についてのみのまとめとなります。

リストデータが固定の場合

リストデータとして、strings.xmlに記述した文字列リストを使用する。

サンプルコード

strings.xml
<resources>
    <string name="app_name">リスト選択サンプル</string>
    <string-array name="lv_menu">
        <item>唐揚げ定食</item>
        <item>ハンバーグ定食</item>
        <item>生姜焼き定食</item>
        <item>ステーキ定食</item>
        <item>野菜炒め定食</item>
        <item>とんかつ定食</item>
        <item>ミンチかつ定食</item>
        <item>コロッケ定食</item>
        <item>回鍋肉定食</item>
        <item>麻婆豆腐定食</item>
        <item>青椒肉絲定食</item>
        <item>焼き魚定食</item>
        <item>焼肉定食</item>
    </string-array>
</resources>
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lvMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:entries="@array/lv_menu"/>

実行すると、以下の画面になる。

リストデータが可変の場合

Kotlinで記述する必要がある。
まずはサンプルコードを記載します。

サンプルコード

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lvMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
MainActivity.kt
package com.websarva.wings.android.listviewsample2

import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //ListViewオブジェクトを取得
        val lvMenu = findViewById<ListView>(R.id.lvMenu)
        //リストビューに表示するリストデータを作成
        var menuList = mutableListOf("からあげ定食","ハンバーグ定食","生姜焼き定食","ステーキ定食",
            "野菜炒め定食","とんかつ定食","ミンチかつ定食","チキンかつ定食","コロッケ定食","回鍋肉定食",
            "麻婆豆腐定食","青椒肉絲定食","焼き魚","焼肉定食")
        //アダプタオブジェクトを生成
        val adapter = ArrayAdapter(this@MainActivity,android.R.layout.simple_list_item_1,menuList)
        //リストビューにアダプトオブジェクトを設定
        lvMenu.adapter = adapter
    }
}

上記のコードを実行すると、固定の場合と同じ画面になる。

解説

アクティビティ中でリストデータを生成する場合の手順

1,リストデータを用意する
2,上記リストデータをもとにアダプタオブジェクトを生成する
3,ListViewにアダプタオブジェクトをセットする

1,リストデータを用意する

var menuList = mutableListOfが該当します。

2,上記リストデータをもとにアダプタオブジェクトを生成する

val adapter = ArrayAdapterが該当します。
アダプタとは、リストビューに表示するリストデータを管理し、リストビューの各行にそのリストデータを当てはめていく動きをするオブジェクトです。

イメージ画像


参照

アダプタオブジェクトの生成

アダプタオブジェクトを生成するには、adapterインターフェイスを実装したクラスを利用します。

主なadapterインターフェイス3種類

インターフェイス名 内容
ArrayAdapter 元データとしてArrayまたは、MutableListを利用
SimpleAdapter 元データとしてMutableList>を利用  XMLデータやJSONデータの解析結果を格納するのに便利
SimpleCursorAdapter 元データとしてCursorオブジェクトを利用 Cursorオブジェクトは、Android端末内のDBを利用する際、SELECT文の結果が格納されたもの

今回は、定食リストをMutableListで生成しているので、ArrayAdapterを使用している。

3,ListViewにアダプタオブジェクトをセットする

lvMenu.adapter = adapterが該当する
ListViewにアダプタオブジェクトをセットするには、ListViewのadapterプロパティを利用する。