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();
これだよ、これ!!
私がやりたかったのはこれ!!
もうちょっと工夫できるか、考えていこう。