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
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 }