Androidアプリ / ListViewを動的に生成して表示する
こんにちは。
12月に入ってることに今日まで気が付かなかったトキです。
年明けまで28日しかないことに打ち震えてます。残り7.6%ですよ。充電しないと!(?)
さて、今日は動的にListViewを生成する方法についてまとめてみます。
ListViewを動的に生成する手順
ではさっそくみていきましょう。この記事では↓のようなビューを例に解説していきます。サンプルデータは完全に今の気分です。
<resources> <string name="app_name">ドリンクメニュー</string> </resources>
name属性がapp_nameの箇所にドリンクメニューと記述します。これがアプリ名を表します。
続いて、activity_main.xml。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lvDrink" android:layout_width="match_parent" android:layout_height="match_parent" />
リスト表示するには、ListViewタグを使います。idをlvDrinkとしましょう。このidはアクティビティでこのListViewを取得しListViewオブフェクトを生成する際に使います。
最後にMainActivity。
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1. ListViewオブジェクト生成 ListView lvDrink = findViewById(R.id.lvDrink); //2. リスト生成 List<String> drinkList = new ArrayList<>(); //3. リストに値を追加 drinkList.add("ペールエール"); drinkList.add("ギネス"); drinkList.add("リオ"); drinkList.add("IPA"); //4. アダプタオブジェクト生成 ArrayAdapter<String> adapter = new ArrayAdapter<>( MainActivity.this, android.R.layout.simple_list_item_1, drinkList); //5. ListViewにアダプタオブジェクトをセット lvDrink.setAdapter(adapter); } }
リストを表示するには、リストデータをもとにアダプタオブジェクトを生成します。
アダプタとは、リストを保持しListViewの各行にそのリストの要素一つずつを当てはめてくれるオブジェクト。今回はアダプタが管理するデータ型がListなのでArrayAdapterで生成しています。
他にも種類あります↓
型 | 元データの型 | 場面 |
---|---|---|
ArrayAdapter | List<?> | 今回のような場合 |
SimpleAdapter | List<Map<String, ?>> | XMLデータやJSONデータの格納など |
SimpleCursorAdapter | Cursorオブジェクトを利用するアダプタクラス | sql文の結果を格納 |
ArrayAdapterをnewするのに3つのパラメータを渡してますが、これはそれぞれ
- Context context : アクティビティ名.this で渡す
- int resource : activity_main.xmlで作成したListViewのid
- List
objects : リストデータ
です。
そして最後に、ListViewオブジェクトに生成したアダプタをセット。
こうすることで、動的にListViewを生成して表示できます。
まとめ
今回は、ListViewの動的生成の基本的な方法についてまとめました。
流れを簡単にまとめるとこんな感じです。
- リストデータを生成
- このリストデータを元にアダプタを生成
- ListViewオブジェクトにアダプタをセット
ここまでご覧になられた方、ありがとうございました。
ではまた〜