myunuts's blog

プログラム関係をメモっています

ListActivityでの葛藤

Activityクラスを継承して画面作成はよく行う。
だけど、ListActivityを継承して画面作成はやったことがないので、チャレンジしていた。

下記の方法をとっていたのだけど、メンテナンス性が悪いし、case文で直値を記載するのは嫌い、などで何かいい方法がないかと模索中。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
  switch (position) {
  case 0: //1番目のアイテム
    startActivity(new Intent(this, AAAAActivity.class));
    break;
  case 1:
    startActivity(new Intent(this, BBBBActivity.class));
    break;
  case 2:
    startActivity(new Intent(this, CCCCActivity.class));
    break;
  }
}

下記の方法だと、メンテナンス性が向上した。

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	SimpleAdapter adapter = new SimpleAdapter(this, getList(),
		android.R.layout.simple_list_item_1,
		new String[]{"title"},
		new int[] {android.R.id.text1}
	);
	setListAdapter(adapter);
	setContentView(R.layout.main);
}

//順番変更・追加するメニューはここで行なう。
private List<Map<String, Object>> getList() {
	List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
	addItem(listMap, "Test1", makeIntent("AAAAActivity"));
	addItem(listMap, "Test2", makeIntent("BBBBActivity"));
	addItem(listMap, "Test3", makeIntent("CCCCActivity"));

	return listMap;
}

private void addItem(List<Map<String, Object>> data, String name, Intent intent ) {
	Map<String, Object> temp = new HashMap<String, Object>();
	temp.put("title", name);
	temp.put("intent", intent);
	data.add(temp);
}

private Intent makeIntent(String className) {
	return new Intent().setClassName(THIS_PKG, THIS_PKG+"."+className);
}

@SuppressWarnings("unchecked")
@Override
protected void onListItemClick (ListView listView, View v, int position, long id) {
	super.onListItemClick(listView, v, position, id);
	Map<String, Object> map = (Map<String, Object>)listView.getItemAtPosition(position);
	Intent intent = (Intent)map.get("intent");

	startActivity(intent);
}

private final String THIS_PKG = getClass().getPackage().getName();

これだよ、これ!!
私がやりたかったのはこれ!!

参照ページ:
http://wiki.android-fun.jp/?ListActivity%E3%81%8B%E3%82%89%E3%81%AE%E7%94%BB%E9%9D%A2%E9%81%B7%E7%A7%BB

もうちょっと工夫できるか、考えていこう。