ListViewはスマホの限られたスペースでスクロールすることで多くの情報を扱えるためとても便利です。Kotlinでの簡単な文字列のリストをListViewで作成してみてみましょう。
API 29
ListView
ListViewはスクロール可能なアイテムのリストを表示するViewグループです。
Adapterは配列またはデータベースなどからそれぞれの要素をリストに入れられるように変換し自動的に挿入してくれます。
ListViewに使うAdapterには用途に応じて ArrayAdapter、BaseAdapter、SimpleAdapter、それ以外にもいくつもあります。
- ArrayAdapter
- BaseAdapterを継承して、簡単な TextView のリストを表示する(これを継承してカスタムでアダプターを作ることも可能)
- SimpleAdapter
- Mapクラスを使ってリスト項目のレイアウトをカスタマイズする
- BaseAdapter
- レイアウトをカスタマイズする場合はこれを継承したカスタムアダプターを作る
今回は簡単なArrayAdapterを使って実装してみたいと思います。
シンプルなArrayAdapter
簡単な ListView(Context context) とArrayAdapterを使った設定方法です。
1. ListView インスタンス生成
1 |
val listView = ListView(this) |
2. setContentView にListViewのインスタンスを設定
1 |
setContentView(listView) |
3. ArrayAdapter のインスタンス生成
1 2 |
val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, texts) |
表示する文字配列 texts を入れますが、simple_list_item_1 は用意されている定義済みのレイアウトファイルのIDです。これを使うとリスト用のレイアウトファイルは不要です。
4. ArrayAdapter のインスタンスをListViewに設定
1 |
listView.setAdapter(arrayAdapter) |
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package your.package.name import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.ListView class MainActivity : AppCompatActivity() { private val texts = arrayOf("abc ", "bcd", "cde", "def", "efg", "fgh", "ghi", "hij", "ijk", "jkl", "klm","lmn","mno","nop", "opq","pqr","qrs","rst","stu","tuv","uvw","vwx","wxy","xyz") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val listView = ListView(this) setContentView(listView) // simple_list_item_1 は、 もともと用意されている定義済みのレイアウトファイルのID val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, texts) listView.setAdapter(arrayAdapter) } } |
ListViewができました。
コードはこれだけです、簡単ですね。
ArrayAdapterのレイアウトを変更
文字を大きくしたり背景色を変えたりと色々バリエーションも可能です。
レイアウトを変更したい時は、ArrayAdapter の設定でレイアウトファイルを指定します。
simple_list_item_1 の代わりに自分で設定するレイアウトファイル、例えば list.xml をres\layout\以下に作って設定すればできます。(activity_main.xml は今回使っていません)
1 |
val arrayAdapter = ArrayAdapter(this, R.layout.list, texts) |
表示するリストを変えて、まとめるとこうなります
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package your.package.name import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.ListView class MainActivity : AppCompatActivity() { private val texts = arrayOf( // Globe Decade の楽曲リストより "Feel Like dance", "Joy to the love (globe)", "SWEET PAIN", "DEPARTURES (RADIO EDIT)", "FREEDOM (RADIO EDIT)", "Is this love", "Can't Stop Fallin' in Love", "FACE", "FACES PLACES", "Anytime smokin' cigarette", "Wanderin' Destiny", "Love again", "wanna Be A Dreammaker", "Sa Yo Na Ra", "sweet heart", "Perfume of love", "MISS YOUR BODY", "still growin' up", "biting her nails", "とにかく無性に…" ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val listView = ListView(this) setContentView(listView) val arrayAdapter = ArrayAdapter(this, R.layout.list, texts) listView.setAdapter(arrayAdapter) } } |
list.xml
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#444400" android:paddingStart="40dp" android:paddingEnd="5dp" android:textSize="24sp" android:textColor="#aaffdd" > </TextView> |
Globeの楽曲リストが出来上がりました。曲をタップすると音楽が再生されるように作れば自分のオリジナルリストができますね。
Javaではこのようになります。
References:
リストビュー | Android Developers
ListView | Android Developers
ArrayAdapter | Android Developers