ListViewとListActivity(1)-基礎編


アンドロイドでリスト表示をおこなうには、ウィジェットであるListViewクラスを使う方法と、 リスト表示専用のアクティビティであるListActivityクラス使う方法とがあります。

リスト表示はAdapterクラスと組み合わせて使う事が前提となっており、 いろいろなAdapterクラスとの組み合わせにより、さまざまなパターンが存在していてややこしい。

Adapterクラスを組み合わせたいろいろなパターンについては、「ListViewとListActivity(3)-応用編」で述べる事として、 今回は、ListViewとListActivityとArrayAdapterクラスを組み合わせた、基本的なパターンについてみていく。

ListViewの基本形とArrayAdapterクラス

まず、ListViewウィジェットの基本形として、よく使うであろうArrayAdapterを使った簡単なサンプルを示す。

リスト1(ListViewSample1.java)

このプログラムを実行すると下図のようなリスト表示画面が表示されます。

 

 

このプログラムでは、15行目でListViewオブジェクトを作成しています。

18行目で、リスト表示する文字列を指定してArrayAdapterオブジェクトを作成、 20行目のsetAdapterメソッドでListViewとこのAdapterオブジェクトを結び付けています。

ListViewにデータを表示するには、Adapterオブジェクトを使います。

Adapterはウィジェットと表示するデータとの仲介役をつとめるオブジェクトです。

ListViewはAdapterViewのサブクラスで、AdapterViewクラスは表示するデータを指定するのに、Adapterオブジェクトを使います。

AdapterViewクラスのサブクラスには、ListViewの他にもGallerySpinnerがあり、 これらのクラスもデータを表示するのにAdapterオブジェクトを使います。

AdapterにはArrayAdapterの他にも、後述するSimpleAdapterBaseAdapterSimpleCursorAdapter等があります。

表示するデータが配列やListクラスの場合は、Adapterクラスとして主にArrayAdapterを使います。

ArrayAdapterにはコンストラクタがいろいろありますが、ここで使用しているコンストラクタでは、第1引数にContextオブジェクト,第2引数にレイアウトファイルのID, 第3引数に表示するデータを示す配列もしくはListクラスを指定します。

第2引数に指定している「android.R.layout.simple_list_item_1」は、 アンドロイドにもともと用意されている定義済みのレイアウトファイルのIDです。

アンドロイドには他にも、リスト表示に使用できる定義済みのレイアウトのIDが幾つかあります。

setSelectionメソッド

21行目のコメントをはずして、もう一度プログラムを実行し直してみて下さい。

setSelectionメソッドは、リスト項目内の引数で指定された値+1の項目にカーソルを移動するメソッドです。

ここでは引数に1を指定しているので、2番目の項目にカーソルが移動します。

setTextFilterEnabledメソッド

22行目のコメントをはずして、もう一度プログラムを実行し直してみて下さい。

ListViewにフォーカスを移して「a」を入力すると、以下の図のように先頭に「a」の文字がある項目だけが表示されます。

 

 

setTextFilterEnabledメソッドは、インクリメンタルサーチをおこなうかどうかを論理値で指定します。

更に、「b」を入力すると、今度は先頭が「ab」の項目だけが表示される事になります。

自前のレイアウトファイルを指定する

ArrayAdapterのコンストラクタの第2引数で指定しているレイアウトファイルには、自前のレイアウトファイルを指定する事ができます。

以下にその例を示します。

リスト2(1)-レイアウトファイル(list_row.xml)

リスト2(2)-Javaソース(ListViewSample2.java)

レイアウトに配置するウィジェットは、テキストを設定できるウィジェットであれば良いようで、Buttonウィジェットを指定しても表示されました。

表示するデータにListクラスを指定する

表示するデータに、配列のかわりにListクラスを指定する例を以下に示します。

リスト3(ListViewSample3.java)

また、ArrayAdapterはListクラスに相当する機能を内部に含んでいるようで、 以下のようにaddメソッドを使ってリスト項目を追加できます。

リスト4(ListViewSample4.java)

ListActivityの基本形

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

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

内部のListViewオブジェクトにAdapterオブジェクトを指定するには、setAdapterメソッドの代わりにsetListAdapterメソッドを使います。

前項のリスト1のListViewオブジェクトの例を、ListActivityを使って実現してみます。

リスト5(ListActivitySample1.java)

このプログラムを実行すると、リスト1と同じ画面が表示されます。

リスト表示専用のアクティビティだけあって、 ListViewオブジェクトをアクティビティに配置する必要が無い分、プログラムがシンプルになっている事がわかると思います。

ListActivity内部にあるListViewを取得するには、getListViewメソッドを使います。

18~20行目のコメントをはずし内部のListViewを取得すると、 リスト1のようにsetSelectionメソッドやsetTextFilterEnabledメソッドを実行できます。

ListActivityにレイアウトファイルを指定する。

ListActivityも、通常のアクティビティのようにレイアウトファイルを指定する事ができますが、レイアウトファイルには守らなければならないきまりがあります。

レイアウトファイルのListViewのIDには、固定のID「android:list」を指定します。

また、ListActivityにレイアウトファイルを指定すると、 リストの表示項目が無い場合に、リストのかわりにメッセージを自動的に表示させる事ができます。

この、メッセージを表示するウィジェットのIDには、固定のID「android:empty」を指定します。

以下にその例を示します。

リスト6(1)-レイアウトファイル(custom_list_activity_view.xml)

リスト6(2)-Javaソース(ListActivitySample2.java)

このプログラムを実行するとリストが表示されますが、 リスト6(2)の8行目を以下のように修正して、リストのデータに空のデータを指定すると、

下図のようにListViewは表示されずに、レイアウトファイルでID「android:empty」を指定したウィジェットが表示されます。

 

 

ページのトップへ戻る