ホーム >  Android > ListView(基本)

Android -ListView(基本)-

リストビュー

リスト表示をするには、ListViewクラスの利用する方法とリスト表示専用のActivtyである ListActvityクラスを利用する方法があります。

ListActivityは、アクティビティの内部にListViewオブジェクトを内包しています。

ListViewにデータを表示するには、Adapterを利用します。

Adapterとは、文字列や画像などの複数データをListView等、ビューとの 中間に存在し、両者の橋渡しをします。

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クラスを使った基本的なサンプル
  2. ListViewクラスを使った基本的なサンプル(自前の行表示レイアウトファイル使用)
  3. ListActivityクラスを利用した基本的なサンプル
  4. ListActivityクラスを利用した基本的なサンプル(自前のListViewを含むレイアウトファイル使用)

1. ListViewクラスを使った基本的なサンプル

サンプル1

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);
  }
}


(1)ArrayAdapterオブジェクトの生成

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

サンプル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);
  }
}

(1)ArrayAdapterオブジェクトの生成

レイアウトファイルは、自前のレイアウトファイルを指定しています。

3. ListActivityクラスを利用した基本的なサンプル

ListActivityはリスト専用のアクティビティクラスで、アクティビティ内部にListViewオブジェクトを内包しています。

新たにListViewウィジェットを作成し、アクティビティに配置する必要がありません。

サンプル3

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);
  }
}


(1)ListActivityクラスの継承

通常のActivityクラスではなくListActivityクラスを継承します。

(2)Adapterの指定

内部のListViewオブジェクトにAdapterオブジェクトを指定するには、setListAdapter()メソッドを使用します。

(3)ListViewオブジェクトの取得

ListActivity内部にあるListViewオブジェクトを取得する場合getListView()メソッドを使用します。
ListViewオブジェクトを取得するとListViewクラスのメソッドを利用することができます。

4. ListActivityクラスを利用した基本的なサンプル
  (自前のListViewを含むレイアウトファイル使用)

ListActivityにも通常のアクティビティのようにレイアウトファイルを指定することができます。

ただし、レイアウトファイルのListViewのIDには、固定の「android:list」と指定しなければなりません。

また、ListActivityにレイアウトファイルを指定すると、リスト表示のない場合に、リストの代わりにメッセージを表示させることができます。
メッセージを表示させるウィジェットのIDには、固定の「android:empty」を指定します。

サンプル4

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);
  }
}


(1)リストビューを含むレイアウト指定

通常のアクティビティのようにレイアウトファイルを指定することができます。

ただし、レイアウトファイル(上記サンプルmain.xml参照)のListViewのIDには、固定の「android:list」と指定しなければなりません。

また、ListActivityにレイアウトファイルを指定すると、リスト表示のない場合に、リストの代わりにメッセージを表示させることができます。
メッセージを表示させるウィジェットのIDには、固定の「android:empty」を指定します。

(2)配列の要素を空にして確認

上段の配列宣言を下段(青文字)に変更するとサンプル画面の右のようにリスト表示のない場合に指定した「データが存在しません」という文字列を表示します。