スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android ArrayAdapterのカスタマイズ

ArrayAdapterのカスタマイズ	
今まではListViewから文字列の情報を配置、取得していましたがArrayAdapterをカスタマイズすることで
オブジェクトを関連付けたListViewの構築が可能となります。
今回は
1.リストにマッピングするクラスを作成
2.リストをクリックすることでマッピングしたクラスを取得、出力する
を行います。


■リストにマッピングするクラス
リストにマッピングさせる簡易なデータ保持用のクラスを作成します。
○DataClass
1: package sample.android.test;
2:
3: public class DataClass {
4: public String key="";
5: public String value="";
6: public String date="";
7:
8: }
3つのデータを保持する簡単なクラスです


■リストに表示するレイアウト
リストに表示するレイアウトを作成します。
ファイルはlayoutフォルダに作成します。
○listview_customlayout.xml
1:
2: <?xml version="1.0" encoding="utf-8"?>
3: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4: android:orientation="horizontal"
5: android:layout_width="fill_parent"
6: android:layout_height="fill_parent"
7: >
8: <TextView android:id="@+id/dataid" ①
9: android:layout_width="wrap_content"
10: android:layout_height="wrap_content"
11: android:background="#ffffff"
12: android:textColor="#ff0000"
13: android:padding="10px"
14: />
15: <TextView android:id="@+id/datavalue"
16: android:layout_width="wrap_content"
17: android:layout_height="wrap_content"
18: android:padding="10px"
19: />
20: </LinearLayout>
①画面には2つのTextViewを表示するようにします。わかりやすいように1つ目のTextViewは背景、文字色を変更します


■ArrayAdapterのカスタマイズ
オリジナルのArrayAdapterを作成します。
ArrayAdapterの継承が必要となります。
1: package sample.android.test;
2:
3: import java.util.List;
4:
5: import android.content.Context;
6: import android.view.LayoutInflater;
7: import android.view.View;
8: import android.view.ViewGroup;
9: import android.widget.ArrayAdapter;
10: import android.widget.TextView;
11:
12: public class CustomListView extends ArrayAdapter<DataClass> { ①
13: private LayoutInflater mInflater;
14:
15: public CustomListView(Context context, List<DataClass> objects) { ②
16: super(context, 0, objects);
17: mInflater = (LayoutInflater) context
18: .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
19: }
20:
21: public View getView(final int position, View convertView, ViewGroup parent) { ③
22: if (convertView == null) {
23: convertView = mInflater.inflate(R.layout.listview_customlayout, null); ④
24: }
25: final DataClass item = this.getItem(position); ⑤
26: if (item != null) {
27: ((TextView) convertView.findViewById(R.id.dataid)).setText(item.key); ⑥
28: ((TextView) convertView.findViewById(R.id.datavalue)).setText(item.value);
29: }
30: return convertView;
31: }
32: }
①ArrayAdapterを継承することでオリジナルのArrayAdapterを作成できます。
今回はDataClassをリストとマッピングさせるため、DataClassを受け取れるようにします。
②クラス生成時にDataClassのリストを受け取ります。
③getViewは列が一つ一つ作成されるタイミングで呼び出されるメソッドです。このメソッド内でリストのレイアウトを変更します。
④LayoutInflater.inflateで作成したレイアウトを設定します
⑤リスト化されたDataClassを順番に受け取ります。
⑥オリジナルのレイアウトの配置したTextViewへDataClassの内容を設定します。
今回はkeyとvalueの内容を配置します。


■カスタマイズしたArrayAdapterを実装する
今回はListActivityにカスタムしたArrayAdapterを設定し出力します
1: package sample.android.test;
2:
3: import java.util.ArrayList;
4: import java.util.List;
5: import android.app.ListActivity;
6: import android.os.Bundle;
7: import android.view.View;
8: import android.widget.ListView;
9: import android.widget.Toast;
10:
11: public class Sample1 extends ListActivity {
12:
13: @Override
14: public void onCreate(Bundle savedInstanceState) {
15: super.onCreate(savedInstanceState);
16:
17:
18: List<DataClass> list = new ArrayList<DataClass>(); ①
19: DataClass dc = new DataClass();
20: dc.key="key1";
21: dc.value="value1";
22: dc.date="2010/12/01";
23: list.add(dc);
24: dc = new DataClass();
25: dc.key="key2";
26: dc.value="value2";
27: dc.date="2011/01/01";
28: list.add(dc);
29: CustomListView adapter = new CustomListView(this, list); ②
30:
31: setListAdapter(adapter); ③
32: }
33:
34: @Override
35: protected void onListItemClick(ListView l,View v,int position,long id){ ④
36: super.onListItemClick(l, v, position, id);
37: // クリックされたアイテムを取得します
38: DataClass item = (DataClass) l.getItemAtPosition(position); ⑤
39: Toast.makeText(this,"key:"+item.key+" value:"+item.value+" date:"+item.date, Toast.LENGTH_LONG).show();
40: }
41:
42:
43: }

①Adapterに設定するDataClassを作成します。今回は確認用に簡単なデータを作成、リスト化します。
②カスタマイズしたAdapterを生成します。生成時にマッピングするDataClassを渡します。
③setListAdapterでListActivityへadapterをマッピングします。
④リストがクリックされたときに呼ばれるonListItemClickメソッドを実装します。
⑤ListView.getItemAtPositionからposition(行数)で選択された行にマッピングされているDataClassを受け取ります。
スポンサーサイト

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。