調用 transaction.remove(fragment) 後,Fragment 視圖仍顯示在界面上。
FragmentTransaction 操作必須調用 commit() 或 commitAllowingStateLoss() 才會真正執行。 所有 add/replace/remove/hide/show 只是記錄操作隊列,commit() 才會異步提交給 FragmentManager 執行。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
// 缺少 ft.commit();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit(); // 或 ft.commitAllowingStateLoss();
commit() 是異步的,若需立即執行可調用 executePendingTransactions()。onSaveInstanceState 後調用 commit() 會拋異常,改用 commitAllowingStateLoss()。remove() 會銷毀視圖但保留實例,配合 popBackStack() 使用。<fragment>) 無法通過 remove() 移除,需動態添加。public void removeFragment(Fragment fragment) {
if (fragment == null || !fragment.isAdded()) return;
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit(); // 關鍵!
// 可選:強制立即執行
fm.executePendingTransactions();
}