Androidでリスト表示をする場合は
ListViewを使うのは当然なのだけれど、
テキストや画像を表示する場合は一筋縄ではいかない。
ちなみに文字をリスト表示させるだけであれば
こんな感じで終わる。
"Activity"を拡張したクラスで次の処理を行う。
//ListViewのインスタンスを生成
ListView listView = (ListView) findViewById(R.id.listView1);
//ArrayAdapterのインスタンスを生成
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
//adapterに要素を追加する。
adapter.add("hoge");
// adapterをリストに追加
listView.setAdapter(adapter);
行数増やしたい場合は
adapter.add();を繰り返せば良い。
しかし、リストの項目を少し複雑にする場合は別。
まず、継承するクラスをActivityから"ListActivity"に変更する。
public class TestActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//表示する要素をリストで用意する。
ArrayList<Fuga> list = new ArrayList<Fuga>();
setApplicationList(list);
HogeAdapter hogeAdp = new HogeAdapter(this, R.layout.main, list);
setListAdapter(hogeAdp);
}
private void setApplicationList(ArrayList<Fuga> fugaList){
//fugaリストを生成する
Fuga fuga = new Fuga();
fuga.setName("tarou");
fuga.setMessage("Hello!");
fugaList.add(fuga);
}
}
上のクラスでやることといえば、
1.表示したい項目をArrayList型で用意すること。
2.用意したリストを設定するAdapterクラス(後述)を用意すること。
3.リストを設定したAdapterクラスを設定(setListAdapter)すること。
という感じです。
次にArrayAdapterクラスを継承したクラスを用意する。
public class HogeAdapter extends ArrayAdapter {
private ArrayList<Fuga> items;
private LayoutInflater inflater;
public HogeAdapter(Context context, int textViewResourceId,
ArrayList<Fuga> items) {
super(context, textViewResourceId, items);
this.items = items;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ビューを受け取る
View view = convertView;
if (view == null) {
// 受け取ったビューがnullなら新しくビューを生成
view = inflater.inflate(R.layout.main, null);
}
//viewから必要な要素を取得して値を設定する。
TextView name = (TextView) view.findViewById(R.id.textView1);
TextView message = (TextView) view.findViewById(R.id.textView2);
ImageView image = (ImageView) view.findViewById(R.id.imageView1);
if (items != null && items.size() >= position) {
name.setText(items.get(position).getName());
message.setText(items.get(position).getMessage());
image.setImageResource(R.drawable.ic_launcher);
}
return view;
}
}
Adapterクラスでやることは、
コンストラクタの設定と、getViewでの表示設定。
コンストラクタはActivityから受け取るリストを設定する必要がある。
またgetViewではViewの設定と、Viewに配置されている各項目の設定。
今回はリスト表示される項目をFugaクラスを使って
ActivityとAdapterクラス間でやりとりしたけれど、
ArrayListを使えば、オブジェクトは何でも良いと思われる。
Fugaクラスの内容はDTOやEntityのような構成で、
単に変数とgetter、setterがあるというだけなので、
特筆して内容は載せず、省略致します。