私Navigation Drawer
は5つのアイテムを持っています。Fragment
ユーザーがアイテムを選択すると、それぞれにロードされFrameLayout
ます。今、ユーザーが引き出してNavigation Drawer
前と同じアイテムを選択した場合、同じものFragment
を再度ロードするべきではないため、選択した位置を保存し、以前に選択した位置が現在と等しい場合次のように閉じてNavigation Drawer
います。
String title = null;
invalidateOptionsMenu();
android.support.v4.app.Fragment fragment = null;
if (position == getPrevSelectedItem()) {
// Already selected fragment is being displayed
} else {
switch (position) {
case Numerics.ZERO:
fragment = new DashBoardFragment();
title = fragment.getClass().getSimpleName();
break;
case Numerics.ONE:
break;
case Numerics.TWO:
break;
case Numerics.THREE:
break;
case Numerics.FOUR:
break;
default:
break;
}
if (fragment != null) {
showFragment(fragment, title);
}
setSelectedItem(position);
}
次のように、前のフラグメントに戻るナビゲーションを提供するために、に追加してフラグメントを追加してbackstack
います。
if (fragment != null) {
String backStateName = fragment.getClass().getName();
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.dashboard_container, fragment);
mFragmentTransaction.addToBackStack(backStateName);
mFragmentTransaction.commit();
}
問題は
、アイテム番号:3 を選択してからアイテム:4 を選択した場合、前の選択がまだ 4 であるのに、アイテム番号:3 で表示Fragment
されていることです。したがって、アイテム番号: 3 をロードから再度選択するとNavigation Drawer
、Fragment
再びロードされます。これを解決する方法は??
編集:
public int getPrevSelectedItem() {
return selectedItem;
}
public void setSelectedItem(int selectedItem) {
this.selectedItem = selectedItem;
}