Android -ListView(基本)-
リストビュー
リスト表示をするには、ListViewクラスの利用する方法とリスト表示専用のActivtyである ListActvityクラスを利用する方法があります。
ListActivityは、アクティビティの内部にListViewオブジェクトを内包しています。
ListViewにデータを表示するには、Adapterを利用します。
Adapterとは、文字列や画像などの複数データをListView等、ビューとの 中間に存在し、両者の橋渡しをします。
Adapterの種類
Adapterの種類は複数ありますので、適宜使い分けます。以下は代表的なものです。
-
- ArrayAdapter
- 配列やListを1行に1つのビューを表示する場合に利用します。
-
- CursorAdapter
- データベースのようなCursorクラスでアクセスするデータ場合に利用します。
-
- SimpleAdapter
- XMLファイルで定義された複数のビューを表示する場合に利用します。
-
- BaseAdapter
-
ArrayAdapter・CursorAdapter・SimpleAdapterのスーパークラスです。
独自のAdapterクラスを定義して、リスト項目のレイアウトを自由にカスタマイズ する場合に利用します。
リストビューは、行が多くなると自動的にスクロール機能が付加されます。
ListViewクラス
ListViewは、AdapterViewクラスのサブクラスで、表示するデータを指定するには、Adapter を使用します。
ListViewクラスのコンストラクタ
- ListView(Context context)
- ListView(Context context, AttributeSet attrs)
- ListView(Context context, AttributeSet attrs, int defStyle)
ListViewクラスの主なメソッド
void | setAdapter(ListAdapter adapter) | アダプタの指定 |
void | setSelection(int position) | 選択状態にする要素の位置を指定します。 |
今回のサンプル内容<
1. ListViewクラスを使った基本的なサンプル
Adapterは、ArrayAdapterを使用しています。
ListViewEx1.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewEx1 extends Activity {
private String[] items = { "a10", "a11", "a21", "b10" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ListViewオブジェクトの生成
ListView listView = new ListView(this);
// 表示するビューの指定
setContentView(listView);
// ArrayAdapterオブジェクトの生成・・・(1)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
// Adapterの指定
listView.setAdapter(adapter);
// 選択する要素の位置の指定(今回は、3を指定 (0始まり))
listView.setSelection(3);
}
}
ArrayAdapterのコンストラクタ
- ArrayAdapter(Context context, int textViewResourceId, T[] objects)
- ArrayAdapter(Context context, int textViewResourceId, List< T > objects)
contextにContextオブジェクト、textViewResourceIdにレイアウトファイルのID、objectsに表示するデータを示す配列または、 Listクラスを指定します。
「android.R.layout.simple_list_item_1」は、アンドロイドに用意されている定義済のレイアウトファイルです。
レイアウトファイルは、自前の行表示レイアウトファイルを指定することもできます。(サンプル2)
2. ListViewクラスを使った基本的なサンプル
(自前の行表示レイアウトファイル使用)
サンプル2では、表示する行のレイアウトファイルを作成し、そのファイルをArrayAdapterオブジェクトの生成時に指定します。
それ以外は、すべてサンプル1と同じです。
res/layout/list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TextView>
ListViewEx2.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewEx2 extends Activity {
private String[] items = { "a10", "a11", "a21", "b10" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ListViewオブジェクトの生成
ListView listView = new ListView(this);
// 表示するビューの指定
setContentView(listView);
// ArrayAdapterオブジェクトの生成・・・(1)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_row, items);
// Adapterの指定
listView.setAdapter(adapter);
// 選択する要素の位置の指定(今回は、3を指定 (0始まり))
listView.setSelection(3);
}
}
レイアウトファイルは、自前のレイアウトファイルを指定しています。
3. ListActivityクラスを利用した基本的なサンプル
ListActivityはリスト専用のアクティビティクラスで、アクティビティ内部にListViewオブジェクトを内包しています。
新たにListViewウィジェットを作成し、アクティビティに配置する必要がありません。
ListViewEx3.java
//ListActivityを継承・・・(1)
public class ListViewEx3 extends ListActivity
private String[] items = { "a10", "a11", "a21", "b10" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ArrayAdapterオブジェクトの生成
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
// Adapterの指定・・・(2)
setListAdapter(adapter);
// ListActivity内部にあるListViewオブジェクトを取得する場合・・・(3)
ListView listView = getListView();
// ListViewオブジェクトを取得したので以下のメソッド等が利用できる
// 選択する要素の位置の指定
listView.setSelection(3);
}
}
通常のActivityクラスではなくListActivityクラスを継承します。
内部のListViewオブジェクトにAdapterオブジェクトを指定するには、setListAdapter()メソッドを使用します。
ListActivity内部にあるListViewオブジェクトを取得する場合getListView()メソッドを使用します。
ListViewオブジェクトを取得するとListViewクラスのメソッドを利用することができます。
4.ListActivityクラスを利用した基本的なサンプル
(自前のListViewを含むレイアウトファイル使用)
ListActivityにも通常のアクティビティのようにレイアウトファイルを指定することができます。
ただし、レイアウトファイルのListViewのIDには、固定の「android:list」と指定しなければなりません。
また、ListActivityにレイアウトファイルを指定すると、リスト表示のない場合に、リストの代わりにメッセージを表示させることができます。
メッセージを表示させるウィジェットのIDには、固定の「android:empty」を指定します。
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="データが存在しません"/>
</LinearLayout>
ListViewEx4.java
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
//ListActivityを継承
public class ListViewEx4 extends ListActivity {
private String[] items = { "a10", "a11", "a21", "b10" }; //(2)
// private String[] items = {};(2)
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//リストビューを含むレイアウト指定(1)
setContentView(R.layout.main);
// ArrayAdapterオブジェクトの生成
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
// Adapterの指定
setListAdapter(adapter);
// ListActivity内部にあるListViewオブジェクトを取得する場合
ListView listView = getListView();
// ListViewオブジェクトを取得したので以下のメソッド等が利用できる
// 選択する要素の位置の指定
listView.setSelection(3);
}
}
通常のアクティビティのようにレイアウトファイルを指定することができます。
ただし、レイアウトファイル(上記サンプルmain.xml参照)のListViewのIDには、固定の「android:list」と指定しなければなりません。
また、ListActivityにレイアウトファイルを指定すると、リスト表示のない場合に、リストの代わりにメッセージを表示させることができます。
メッセージを表示させるウィジェットのIDには、固定の
「android:empty」を指定します。
上段の配列宣言を下段(青文字)に変更するとサンプル画面の右のようにリスト表示のない場合に指定した「データが存在しません」という文字列を表示します。