首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 側滑選單返回上一狀態:Fragment 隱藏而非銷毀

     編輯:程式設計綜合問答

側滑選單 (NavigationDrawer) 中點擊項目跳轉 Activity,返回時發現選單狀態重置。核心原則:

  1. 啟動新 Activity 時,當前 Activity 不要 `finish()`,保留在 Back Stack。
  2. Fragment 切換用 `hide()`/`show()`,不用 `replace()` 或 `remove()`,保持實例與視圖狀態。

正確模式

// 側滑選單點擊項目
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;
}

生命週期保障

  • `hide()` → Fragment `onHiddenChanged(true)`,View 仍附著於容器,狀態 (滾動位置、輸入內容) 完整保留。
  • 返回鍵按下 → `DetailActivity` 結束 → `MainActivity` `onRestart()` → `onStart()` → `onResume()`,側滑選單 Fragment 仍為原實例。

避坑指南

錯誤做法後果正確做法
跳轉前 `finish()`主 Activity 銷毀,返回時重建,選單狀態丟失不呼叫 `finish()`
`replace()` 切換 Fragment舊 Fragment `onDestroyView`,返回時重新 `onCreateView``hide()`/`show()`
側滑選單用 `DialogFragment`返回鍵行為不一致用 `DrawerLayout` + 普通 Fragment

遵循「不 finish、不 replace」,側滑選單與頁面狀態即可完美保持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved