スマホでは色々な場面でリスト表示が使われます。リストのitemはダイナミックに増減できてスクロールすれば限られた画面内で多くの情報を扱えるためとても便利なわけです。
2021.2.1
ListView
ListViewはスクロール可能なアイテムのリストを表示するViewグループです。
Adapterは配列またはデータベースなどからそれぞれの要素をリストに入れられるように変換し自動的に挿入してくれます。
ListViewに使うAdapterには用途に応じて ArrayAdapter、BaseAdapter、SimpleAdapter、それ以外にもいくつもあります。
- ArrayAdapter
- BaseAdapterを継承して、簡単な TextView のリストを表示する(これを継承してカスタムでアダプターを作ることも可能)
- SimpleAdapter
- Mapクラスを使ってリスト項目のレイアウトをカスタマイズする
- BaseAdapter
- レイアウトをカスタマイズする場合はこれを継承したカスタムアダプターを作る
今回は簡単なArrayAdapterを使って実装してみたいと思います。
シンプルなArrayAdapter
簡単な ListView(Context context) とArrayAdapterを使った設定方法です。
1. ListView インスタンス生成
1 |
ListView listView = new ListView(this); |
2. setContentView にListViewのインスタンスを設定
1 |
setContentView(listView); |
3. ArrayAdapter のインスタンス生成
1 2 |
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, texts); |
表示する文字配列 texts を入れますが、simple_list_item_1 は用意されている定義済みのレイアウトファイルのIDです。これを使うとリスト用のレイアウトファイルは不要です。
4. ArrayAdapter のインスタンスをListViewに設定
1 |
listView.setAdapter(arrayAdapter); |
MainActivity.java
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 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity { private static final String[] texts = { "abc ", "bcd", "cde", "def", "efg", "fgh", "ghi", "hij", "ijk", "jkl", "klm", "abc ", "bcd", "cde", "def", "efg", "fgh", "ghi", "hij", "ijk" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this); setContentView(listView); // simple_list_item_1 は、 もともと用意されている定義済みのレイアウトファイルのID ArrayAdapter<String> arrayAdapter = new 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 2 |
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, R.layout.list, texts); |
表示するリストを変えて、まとめるとこうなります
MainActivity.java
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 46 47 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity { private static final String[] texts = { // 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", "とにかく無性に…" ,"G", "l", "o", "b", "e" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this); setContentView(listView); ArrayAdapter<String> arrayAdapter = new 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の楽曲リストが出来上がりました。曲をタップすると音楽が再生されるように作れば自分のオリジナルリストができますね。
Kotlinではこのようになります。
- ArrayAdapter
- ListView と ArrayAdapter 簡単なテキストリストの表示
- ArrayAdapterを使ってレイアウトをアレンジ
- ListActivity と ArrayAdapterで画像とテキストをリスト表示
- Basedapter
- BaseAdapterで画像とテキストをリスト表示
- ListViewリストをタップして画面遷移
- ListViewアイテムの移動、削除
- ListView アイテム個々の背景、高さなどを変える
References:
リストビュー | Android Developers
ListView | Android Developers
ArrayAdapter | Android Developers