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
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と関わる部分があるため説明は後述する。