リストビューを置き換える
その必要は本当にありません。
ListView を保持しますが、その ArrayAdapter を置き換えます
これが最も簡単に実装できます。最初に、次の文字列配列 (都市名) を res/values/strings.xml に追加します。
<string-array name="mercury_array">
<item>Undiscovered City 1 (Mercury)</item>
<item>Undiscovered City 2 (Mercury)</item>
<item>Undiscovered City 3 (Mercury)</item>
<item>Undiscovered City 4 (Mercury)</item>
</string-array>
<string-array name="venus_array">
<item>Undiscovered City 1 (Venus)</item>
<item>Undiscovered City 2 (Venus)</item>
<item>Undiscovered City 3 (Venus)</item>
<item>Undiscovered City 4 (Venus)</item>
</string-array>
<string-array name="earth_array">
<item>New York</item>
<item>Hong Kong</item>
<item>New Delhi</item>
<item>London</item>
</string-array>
<string-array name="mars_array">
<item>Undiscovered City 1 (Mars)</item>
<item>Undiscovered City 2 (Mars)</item>
<item>Undiscovered City 3 (Mars)</item>
<item>Undiscovered City 4 (Mars)</item>
</string-array>
<string-array name="jupiter_array">
<item>Undiscovered City 1 (Jupiter)</item>
<item>Undiscovered City 2 (Jupiter)</item>
<item>Undiscovered City 3 (Jupiter)</item>
<item>Undiscovered City 4 (Jupiter)</item>
</string-array>
<string-array name="saturn_array">
<item>Undiscovered City 1 (Saturn)</item>
<item>Undiscovered City 2 (Saturn)</item>
<item>Undiscovered City 3 (Saturn)</item>
<item>Undiscovered City 4 (Saturn)</item>
</string-array>
<string-array name="uranus_array">
<item>Undiscovered City 1 (Uranus)</item>
<item>Undiscovered City 2 (Uranus)</item>
<item>Undiscovered City 3 (Uranus)</item>
<item>Undiscovered City 4 (Uranus)</item>
</string-array>
<string-array name="neptune_array">
<item>Undiscovered City 1 (Neptune)</item>
<item>Undiscovered City 2 (Neptune)</item>
<item>Undiscovered City 3 (Neptune)</item>
<item>Undiscovered City 4 (Neptune)</item>
</string-array>
loadContentList(int)
でメソッドを作成しますMainActivity
。これは、メイン リストのアイテム クリック時に呼び出されるメソッドです。
private void loadContentList(int position) {
setTitle(mPlanetTitles[position]);
String[] content;
switch(position) {
case 0:
content = getResources().getStringArray(R.array.mercury_array);
break;
case 1:
content = getResources().getStringArray(R.array.venus_array);
break;
case 2:
content = getResources().getStringArray(R.array.earth_array);
break;
case 3:
content = getResources().getStringArray(R.array.mars_array);
break;
case 4:
content = getResources().getStringArray(R.array.jupiter_array);
break;
case 5:
content = getResources().getStringArray(R.array.saturn_array);
break;
case 6:
content = getResources().getStringArray(R.array.uranus_array);
break;
case 7:
content = getResources().getStringArray(R.array.neptune_array);
break;
default:
content = getResources().getStringArray(R.array.neptune_array);
}
// Change ListView's adapter
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, content));
// Change OnItemClickListener // CityItemClickListener is defined below
mDrawerList.setOnItemClickListener(new CityItemClickListener());
}
Planet アイテムがクリックされたときに ListView を更新したいので、DrawerItemClickListener のメソッド本体を変更し、新しく追加された を呼び出しますloadContentList(int)
。
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//selectItem(position);
loadContentList(position);
}
}
都市がクリックされたときにフラグメントを変更するには、別の OnItemClickListener が必要です。:
private class CityItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// This is the method that was being called on planet click
// in the original example. Implementation of it is up to you
selectItem(position);
}
}
ListView と ArrayAdapter を保持しますが、アダプターのデータを置き換えます
ArrayAdapter を定義します。
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
---------> private ArrayAdapter<String> mAdapter;
MainActivity の onCreate(Bundle):
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(mPlanetTitles));
mAdapter = new ArrayAdapter<String>(this,
R.layout.drawer_list_item, planetList);
// set up the drawer's list view with items
mDrawerList.setAdapter(mAdapter);
UnsupportedOperationException
を呼び出すときに避けるために、ArrayList を渡す必要がありmAdapter.clear()
ます。
次のように変更loadContentList(int)
します。
private void loadContentList2(int position) {
setTitle(mPlanetTitles[position]);
String[] content;
switch(position) {
....
....
}
ArrayList<String> cityList = new ArrayList<String>();
cityList.addAll(Arrays.asList(content));
mAdapter.clear();
mAdapter.addAll(cityList);
// update
mAdapter.notifyDataSetChanged();
// Change on item click listener
mDrawerList.setOnItemClickListener(new CityItemClickListener());
}
CityItemClickListener と DrawerItemClickListener は以前と同じままです。唯一の変更点は、惑星リスト項目のクリックで新しい ArrayAdapter を作成しないことです。
ユーザーが都市ビューから惑星リストに戻る方法 (おそらくボタン) を理解する必要があります。
ExpandableListView を調べることもお勧めします。問題をよりエレガントに解決するかもしれません。