diadia

興味があることをやってみる。自分のメモを残しておきます。

ListView,Spinnerとadapterについて

ListViewとadapterの関係

ListViewの各要素を表示させるには、strings.xml

<string-array name="japanese">
<item>あいうえお</item>
<item>かきくけこ</item>
<item>さしすせそ</item>
</string-array>

を記述して、レイアウトファイルにandroid:text="japanese"みたいなことをして各要素を表示する事ができる。

この他に要素を表示する方法としてadapterがある。これは.ktファイル内に要素を記述してその内容を表示するものである。

adapterの概念

Adapterは配列またはデータベースなどからそれぞれの要素をリストに入れられるように変換し自動的に挿入してくれます。

他に必要な引数は別において、共通的な考え方には以下がある。

adapterの引数にリスト様式のデータとレイアウトを引数としてadapterのインスタンスを生成する。このapapterをlistviewのプロパティであるadapterでつなげて作成する。

ArrayAdapter

sample

val lv_object = findViewById<ListView>(R.id.hoge)
val list_data = arrayOf("寿司","ラーメン", "カレー")
val adapter = ArrayAdapter(applicationContext, android.R.layout.simple_list_item_1, list_data)

lv_object.adapter = adapter

https://developer.android.com/reference/kotlin/android/widget/ArrayAdapter ArrayAdapterはListViewやSpinnerを使うときに使われるようだ。

SimpleAdapter

simpleadapterはmapのリスト様式データを使う。

adapterとレイアウトの関係について

レイアウトファイルはandroid studioビルトインのファイルと自作ファイルの2種類がある。そこで自分がどのレイアウトファイルを使うかを選ぶ必要がある。自分がどのレイアウトファイルを使用するかの宣言はadapterのコンストラクタで行う。具体的にはArrayAdapter, SimpleAdapterの引数の一つとしてR値でレイアウトファイルを記述する。また記述も多少違いがある。

自作したファイルを宣言する場合はR.id.ファイル名

ビルトインファイルを宣言する場合はandroid.R.id.ファイル名

このRの前にandroidをつけるか否かは、このように考えれば良い。Rはresourceつまりresを表す。res以下には、drawableやlayoutフォルダがある。だからR.drawable.hoge, R.layout.fooと書く。Rから書く場合は自分のファイルをR値として宣言する。アンドロイドビルトインのファイルを使う場合はそれを示すandroid.R...と続けて書く。 https://developer.android.com/guide/topics/resources/accessing-resources.html?hl=ja#%E6%A7%8B%E6%96%87

string-arrayを元にしたadapterオブジェクトの生成方法

spPais.adapter = ArrayAdapter<String>(
       MyApplication.appContext,
       android.R.layout.simple_spinner_item,
       paisItems)

paisItemsはArrayList, Array, Listである。R.stringsファイルに定めたデータからリストを作成する方法は以下となる。

val adapter = ArrayAdapter.createFromResource(Contextオブジェクト, R.array.paisList, android.R.layout.simple_list_item_1)

したがってadapterをspinnerにセットする方法は

fun setAdapterToPaisSpinner(spinner: Spinner){
    // R.id.spSelectPais用の関数
    val adapter = ArrayAdapter.createFromResource(MyApplication.appContext, R.array.paisList, android.R.layout.simple_list_item_1)
    spinner.adapter = adapter
}