ときまつ日記

プログラマ「トキ」と、広告運用「マツ」でスマホアプリを作成したり色々やっています。分かったことや進捗などをまとめるので、同じ悩みを持っている人と情報共有できればと思います。【トキ→ブログ:https://morelia.tokyo, リポジトリ:https://github.com/b07nji 】

Androidアプリ / ListViewを動的に生成して表示する

こんにちは。
12月に入ってることに今日まで気が付かなかったトキです。
年明けまで28日しかないことに打ち震えてます。残り7.6%ですよ。充電しないと!(?)


さて、今日は動的にListViewを生成する方法についてまとめてみます。

ListViewを動的に生成する手順

ではさっそくみていきましょう。この記事では↓のようなビューを例に解説していきます。サンプルデータは完全に今の気分です。
f:id:TokiMatsu:20181203211626p:plain


まずはstrings.xmlから。
strings.xml

<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つのパラメータを渡してますが、これはそれぞれ

  1. Context context : アクティビティ名.this で渡す
  2. int resource : activity_main.xmlで作成したListViewのid
  3. List objects : リストデータ

です。

そして最後に、ListViewオブジェクトに生成したアダプタをセット。
こうすることで、動的にListViewを生成して表示できます。

まとめ

今回は、ListViewの動的生成の基本的な方法についてまとめました。
流れを簡単にまとめるとこんな感じです。

  1. リストデータを生成
  2. このリストデータを元にアダプタを生成
  3. ListViewオブジェクトにアダプタをセット


ここまでご覧になられた方、ありがとうございました。

ではまた〜