リストの項目に 2 行のテキストを表示する ListView (リストビュー) の使い方を紹介します。
(2 行のテキストを表示する ListView の作成と項目選択時の処理についてのサンプルです)
2 行のテキストを表示する ListView (リストビュー) を作成するには、
- リソースファイル (xml ファイル) に ListView (リストビュー) を定義する
- ソースファイルで、ListView (リストビュー) に表示するデータ (アダプタ) を生成する
(レイアウトには android.R.layout.simple_list_item_2 を使用) - ListView (リストビュー) に 2. で生成したデータ (アダプタ) を設定する
- ListView (リストビュー) に項目選択イベントを設定する
1. リソースファイル (xml ファイル) に ListView (リストビュー) を定義する
リソースファイル (xml ファイル) に ListView を定義します。
ListView 特有の属性は特に設定する必要は無いので、、id と高さ、幅を設定します。
layout/main.xml
<listview xmlns:android="http://schemas.android.com/apk/res/android"> android:id="@+id/listView1" android:layout_height="wrap_content" android:layout_width="match_parent" </listview>
2. ソースファイルで、ListView (リストビュー) に表示するデータを生成する
ListView (リストビュー) に表示するデータを設定するには、Adapter (アダプタ) を使用する必要があります。
ここでは、2 行のテキスト表示リストビュー を作成するために、SimpleAdapter を使用します。
// ListView に設定するデータ (アダプタ) を生成する (テキスト 2 行表示リスト) SimpleAdapter adapter = new SimpleAdapter( this, list, android.R.layout.simple_list_item_2, new String[] {"main", "sub"}, new int[] {android.R.id.text1, android.R.id.text2} );第一引数には、Content を設定するので、this を指定します。
第二引数には、表示するデータのリストを設定します。ここで設定した list については後述します。
第三引数には、ListView (リストビュー) の各項目のレイアウトを指定します。2 行のテキスト表示なので、アンドロイドで標準で用意されている android.R.layout.simple_list_item_2 が使用できます。
第四引数には、設定するデータリストの中のマップのキーを設定します。1 行目のテキストのキーは main、2 行目のテキストのキーは sub とします。(自由に設定してかまいません。)
第五引数には、各項目のレイアウトの id を設定します。レイアウトに android.R.layout.simple_list_item_2 を設定したので、この中で定義されている id の text1、text2 を設定します。
上記の第二引数に設定した list は、以下のようにして生成します。
まず、表示する文字列定数を定義します。
// リストに設定するメインテキスト private final String[] mainText = new String [] { "メインテキスト 1", "メインテキスト 2", "メインテキスト 3" }; // リストに設定するサブテキスト private final String[] subText = new String[] { "サブテキスト 1", "サブテキスト 2", "サブテキスト 3" };次に、list を生成します。1 行目に表示するメインテキストと、2 行目に表示するサブテキストのマップをリスト追加していきます。
// ListView に表示する文字列を生成 final List<Map<String, String>> list = new ArrayList<Map<String, String>>(); for (int i=0; i<mainText.length; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("main", mainText[i]); map.put("sub", subText[i]); list.add(map); }
3. ListView (リストビュー) に 2. で生成したアダプタを設定する
ListView (リストビュー) にアダプタを設定するには、setAdapter メソッドを使用します。
// リストビューにデータ (アダプタ) を追加 ListView listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter);
4. ListView (リストビュー) に項目選択イベントを設定する
ListView (リストビュー) の項目を選択したときの処理を追加するには、setOnItemClickListener メソッドを使用します。
// アイテムクリック時のイベントを設定 (テキスト 2 行表示) listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { // ここに項目選択時の処理を追加 // 引数 pos が選択した項目のインデックスになります (0 始まり) } });
全体のソースコードは以下のようになります。
■ リソース (xml) ファイル
layout/main.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" />
■ ソースコード
package jp.sample.listview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class ListViewSampleActivity extends Activity { // リストに設定するメインテキスト private final String[] mainText = new String [] { "メインテキスト 1", "メインテキスト 2", "メインテキスト 3" }; // リストに設定するサブテキスト private final String[] subText = new String[] { "サブテキスト 1", "サブテキスト 2", "サブテキスト 3" }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ListView に表示する文字列を生成 final List<Map<String, String>> list = new ArrayList<Map<String, String>>(); for (int i=0; i<mainText.length; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("main", mainText[i]); map.put("sub", subText[i]); list.add(map); } // ListView に設定するデータ (アダプタ) を生成する (テキスト 2 行表示リスト) SimpleAdapter adapter = new SimpleAdapter( this, list, android.R.layout.simple_list_item_2, new String[] {"main", "sub"}, new int[] {android.R.id.text1, android.R.id.text2} ); // リストビューにデータ (アダプタ) を追加 ListView listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); // アイテムクリック時のイベントを設定 (テキスト 2 行表示) listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { // 項目選択時の処理を記述 // 引数 pos が選択された項目のインデックス (0 始まり) } }); } }
0 件のコメント:
コメントを投稿