コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Androidアプリ入門 No.22 SimpleAdapter

ListView

SimpleAdapter

listViewはadapterを用いてデータをセットする。まず、SimpleAdapterを用いる。SimpleAdapterのコンストラクタの定義は以下。

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

コンストラクタの引数は以下。

引数 説明
context 表示するView。今回はthis。
data ListViewに表示するデータで、MapのListでデータを保持する。
resources ListViewに表示するウィジェットの定義されているresourceのid。
from ListViewに表示するdataのMapのキー項目。
to ListViewに表示するウィジェットが定義されているresourcesの中のウィジェットのid。fromの0番目の値がtoの0番目に対応する。以降、1番目は1番目というように対応する。

まずはListViewで単純に画面表示する。いつも通りmain.xmlにListViewを用意する。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

実際にListViewの項目の内容は別のレイアウトファイルで定義する。res/layout/list.xmlというファイルを作成する。作成内容は以下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/no"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#f00"
        android:textSize="16sp"
        />
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        />
</LinearLayout>

このlist.xmlファイルがListViewの項目の1つ1つに当たる。ボタンをつけたりチェックボックスをつけたりもできるが、まずはTextViewのみで行う。
次に、MainActivity.javaを以下のようにする。

package sample.at;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView listView = (ListView) findViewById(R.id.listView);
        SimpleAdapter adapter = new SimpleAdapter(this, getListData(), R.layout.list,
                new String[] { "no", "name" }, new int[] { R.id.no, R.id.name });
        listView.setAdapter(adapter);
    }

    private List<Map<String, String>> getListData() {
        List<Map<String, String>> listData = new ArrayList<Map<String, String>>();

        listData.add(getMapData(new String[][] { { "no", "01" }, { "name", "あいうえお" } }));
        listData.add(getMapData(new String[][] { { "no", "02" }, { "name", "かきくけこ" } }));
        listData.add(getMapData(new String[][] { { "no", "03" }, { "name", "さしすせそ" } }));
        listData.add(getMapData(new String[][] { { "no", "04" }, { "name", "たちつてと" } }));
        listData.add(getMapData(new String[][] { { "no", "05" }, { "name", "なにぬねの" } }));
        listData.add(getMapData(new String[][] { { "no", "06" }, { "name", "はひふへほ" } }));
        listData.add(getMapData(new String[][] { { "no", "07" }, { "name", "まみむめも" } }));
        listData.add(getMapData(new String[][] { { "no", "08" }, { "name", "や ゆ よ" } }));
        listData.add(getMapData(new String[][] { { "no", "09" }, { "name", "らりるれろ" } }));
        listData.add(getMapData(new String[][] { { "no", "10" }, { "name", "わをん  " } }));

        return listData;
    }

    private Map<String, String> getMapData(String[][] values) {
        Map<String, String> map = new HashMap<String, String>();
        for (int i = 0; i < values.length; i++) {
            map.put(values[i][0], values[i][1]);
        }

        return map;
    }
}

実行結果は以下のようになる。