側滑選單 (NavigationDrawer) 中點擊項目跳轉 Activity,返回時發現選單狀態重置。核心原則:
// 側滑選單點擊項目
public void onNavigationItemSelected(MenuItem item) {
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent); // 不要 finish()
drawerLayout.closeDrawers();
}
// Fragment 切換邏輯 (在主 Activity)
private void switchFragment(Fragment target) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (currentFragment != null) ft.hide(currentFragment);
if (!target.isAdded()) ft.add(R.id.container, target);
ft.show(target).commit();
currentFragment = target;
}
| 錯誤做法 | 後果 | 正確做法 |
|---|---|---|
| 跳轉前 `finish()` | 主 Activity 銷毀,返回時重建,選單狀態丟失 | 不呼叫 `finish()` | `replace()` 切換 Fragment | 舊 Fragment `onDestroyView`,返回時重新 `onCreateView` | `hide()`/`show()` |
| 側滑選單用 `DialogFragment` | 返回鍵行為不一致 | 用 `DrawerLayout` + 普通 Fragment |
遵循「不 finish、不 replace」,側滑選單與頁面狀態即可完美保持。