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"/>

```

実行すると、以下の画面になる。
![スクリーンショット 2021-06-11 11.56 1 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/642f198b-6c9e-ae7c-c1a5-d916300194a7.png)

##リストデータが可変の場合
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``が該当します。
``アダプタ``とは、リストビューに表示するリストデータを管理し、リストビューの各行にそのリストデータを当てはめていく動きをするオブジェクトです。
####イメージ画像
![151221a2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/49818c49-48be-a052-5411-c29610cff59a.png)
[参照](https://sugi.sakura.ne.jp/a/151221a.html)

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

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


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

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