動態添加 Fragment 到回棧,按返回鍵彈出 Fragment。當棧空時 Activity 顯示空白佈局,期望自動 `finish()`。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
FragmentManager fm = getSupportFragmentManager(); // 或 getFragmentManager()
if (fm.getBackStackEntryCount() > 1) { // >1 表示還有 Fragment 可彈出
fm.popBackStack();
return true;
} else if (fm.getBackStackEntryCount() == 1) {
// 最後一個 Fragment,彈出後棧空,Activity 應結束
fm.popBackStack();
finish(); // 關閉 Activity
return true;
}
}
return super.onKeyDown(keyCode, event);
}
// 在 Activity onCreate 中
OnBackPressedDispatcher dispatcher = getOnBackPressedDispatcher();
dispatcher.addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
} else {
finish();
}
}
});
生命周期感知、自動移除、避免重寫 `onKeyDown`。