今回は複数のテキストやイメージ画像を表示させてみます。
複数の要素をListViewの各エントリに設定する必要がある為、
アダプタにはSimpleAdapterを使用します。
(実際のコードでは SimpleAdapterを拡張したクラスを使用しています。)
Javaコードは以下の通り
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class ListView02 extends Activity{ // リストビューに表示する文字列1 String[] mCode = { "001", "002", "003", "004", "005"}; // リストビューに表示する文字列2 String[] mName = { "Itiro", "Jiro", "Saburo", "Siro", "Goro"}; // リストビューに表示するImage用配列のインスタンス生成 int[] mIcon = new int[5]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Image用配列にリソースIDを設定 for (int i = 0; i < 5; i++) { mIcon[i] = R.drawable.icon; } // データを格納するためのArrayListを宣言 List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 5; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("code", mCode[i]); map.put("name", mName[i]); map.put("icon", mIcon[i]); // 作成したmapをリストに追加 data.add(map); } // 作成したdataとカスタマイズしたレイアウト「row.xml」を // 紐付けたCustomAdapterを作成する CustomAdapter customAdapter = new CustomAdapter( this, data, R.layout.row, new String[]{"code", "name"}, new int[]{R.id.code, R.id.name} ); // 「main.xml」のListViewにSimpleAdapterをセットする ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(customAdapter); } // SimpleAdapterを継承したCustomAdapterを作成 public class CustomAdapter extends SimpleAdapter { LayoutInflater mLayoutInflater; // コンストラクタ public CustomAdapter( Context context, List<? extends Map> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); } @SuppressWarnings("unchecked") // ジェネリクスを使用したキャストの為 @Override public View getView( int position, View convertView, ViewGroup parent) { mLayoutInflater = LayoutInflater.from(getBaseContext()); // レイアウトにrow.xmlを紐付ける convertView = mLayoutInflater.inflate(R.layout.row, parent, false); ListView listView = (ListView) parent; // 該当する位置のデータを取得する Map<String, Object> data = (Map<String, Object>) listView. getItemAtPosition(position) ; // 文字入れつ1をTextViewにセットする TextView code = (TextView) convertView. findViewById(R.id.code); code.setText((String) data.get("code")); // 文字列2をTextViewにセットする TextView name = (TextView) convertView. findViewById(R.id.name); name.setText((String) data.get("name")); // アイコンをImageViewにセットする ImageView icon = (ImageView) convertView. findViewById(R.id.icon); icon.setImageResource((Integer) data.get("icon")); return convertView; } } }
CustomAdapterクラスではListViewの要素として
row.xmlファイルの定義されたビュー情報を設定しています。
ListViewクラスでは、
表示画面の各行に表示されるテキスト&イメージをHashMapでマッピングし、
ArrayListに格納しています。
更に、HashMapを要素に持つArrayListを引数に、CustomAdapterインスタンスを生成し、
表示画面であるListViewにセットしています。
"res/layout/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="fill_parent" /> </LinearLayout>
"res/layout/row.xml"のコードは以下の通り
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="60dip" > <ImageView android:id="@+id/icon" android:layout_width="60dip" android:layout_height="70dip" android:src="@drawable/icon" /> <TextView android:id="@+id/code" android:layout_width="100dip" android:layout_height="wrap_content" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Listの各エントリ(ビューの1行)に設定する内容を示しています。
1行目・・・ImageView id:icon
2行目・・・TextView id:code
3行目・・・TextView id:name
上記コードで実行すると、以下の様にリスト画面にイメージが表示されます。
ListViewにイメージが表示されました。
0 件のコメント:
コメントを投稿