コンピュータクワガタ

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

Androidアプリ入門 No.23 ArrayAdapter

ListView

ArrayAdapter

ここでは、ArrayAdapterを確認する。まず、以下のコンストラクタの例を確認する。

ArrayAdapter(Context context, int textViewResourceId)
引数 説明
context 表示するView。今回はthis。
textViewResourceId TextViewのリソースID。

main.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"
    >
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

list.xmlは以下のようにTextViewだけ用意する。

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="28sp"
    />

MainActivity.javaは以下となる。TextViewのtext属性を指定する形になるのでaddメソッドでStringを追加し、ListViewを構築する。

package sample.at;

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

public class MainActivity extends Activity {
    private static final String[] LIST_DATA = { "あいうえお", "かきくけこ", "さしすせそ",
            "たちつてと", "なにぬねの", "はひふへほ", "まみむめも", "や ゆ よ",
            "らりるれろ", "わをん" };

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

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list);
        for (String str : LIST_DATA) {
            arrayAdapter.add(str);
        }
        listView.setAdapter(arrayAdapter);
    }
}

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

ArrayAdapterの次のコンストラクタは以下。

ArrayAdapter(Context context, int textViewResourceId, T[] objects)
引数 説明
context 表示するView。今回はthis。
textViewResourceId TextViewのリソースID。

objects TextViewに使用するオブジェクト。

先ほどの例は、後からStringの配列をaddメソッドで追加していた。今回の例は、objectsにStringの配列を渡してそれを表示している。処理結果は先ほどと同じで、異なるのは以下のMainActivity.javaのみ。

package sample.at;

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

public class MainActivity extends Activity {
    private static final String[] LIST_DATA = { "あいうえお", "かきくけこ", "さしすせそ",
            "たちつてと", "なにぬねの", "はひふへほ", "まみむめも", "や ゆ よ",
            "らりるれろ", "わをん" };

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

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list, LIST_DATA);
        listView.setAdapter(arrayAdapter);
    }
}

同じようなコンストラクタでListの配列を使用するものがある。

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
引数 説明
context 表示するView。今回はthis。
textViewResourceId TextViewのリソースID。
objects TextViewに使用するオブジェクト。

これもString配列の代わりにListを用いるのみで異なるのは、MainActivity.javaのみ。

package sample.at;

import java.util.ArrayList;
import java.util.List;

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

public class MainActivity extends Activity {
    private static final List<String> LIST_DATA;

    static {
        LIST_DATA = new ArrayList<String>();
        LIST_DATA.add("あいうえお");
        LIST_DATA.add("かきくけこ");
        LIST_DATA.add("さしすせそ");
        LIST_DATA.add("たちつてと");
        LIST_DATA.add("なにぬねの");
        LIST_DATA.add("はひふへほ");
        LIST_DATA.add("まみむめも");
        LIST_DATA.add("や ゆ よ");
        LIST_DATA.add("らりるれろ");
        LIST_DATA.add("わをん  ");
    }

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

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list, LIST_DATA);
        listView.setAdapter(arrayAdapter);
    }
}

次のコンストラクタは以下である。

ArrayAdapter(Context context, int resource, int textViewResourceId)
引数 説明
context 表示するView。今回はthis。
resource textViewResourceIdを含むレイアウトのresource。
textViewResourceId TextViewのリソースID。

TextViewを含むレイアウトで少し加工したい場合に用いる。main.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"
    >
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

次に、list.xml。TextViewを含むレイアウトのファイルとなる。

<?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/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="28sp"
        />
</LinearLayout>

最後に、MainActivity.javaとなる。コンストラクタで表示する値を指定していないのでaddメソッドで追加している。

package sample.at;

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

public class MainActivity extends Activity {
    private static final String[] LIST_DATA = { "あいうえお", "かきくけこ", "さしすせそ",
            "たちつてと", "なにぬねの", "はひふへほ", "まみむめも", "や ゆ よ",
            "らりるれろ", "わをん" };

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

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                                            R.layout.list, R.id.name);
        for (String str : LIST_DATA) {
            arrayAdapter.add(str);
        }
        listView.setAdapter(arrayAdapter);
    }
}

あと、2つ以下のコンストラクタがある。

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
引数 説明
context 表示するView。今回はthis。
resource textViewResourceIdを含むレイアウトのresource。
textViewResourceId TextViewのリソースID。
objects TextViewに使用するオブジェクト。

この2つのコンストラクタは、最後にTextViewに表示するString配列もしくはListを指定するだけで、先の例とほぼ変わらないため例は割愛する。
もうひとつCursorAdapterがあるがSQLiteと関わる部分があるため説明は後述する。