App 中有三個 Activity:
A(主頁) → B(詳情)
C(其他入口) → B(詳情)
B 頁面重寫了返回鍵邏輯,導致從 A 進入 B 時按返回鍵**錯誤跳回 C**,而非預期的 A。
@Override
public void onBackPressed() {
// 1. 銷毀當前 B
finish();
// 2. 顯式啟動目標 A(並清空棧上可能殘留的 C)
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
FLAG_ACTIVITY_CLEAR_TOP:若 A 已在棧中,清除其上方所有 Activity(含 C),直接復用 A 實例。FLAG_ACTIVITY_SINGLE_TOP:防止 A 重複創建(若 A 已在棧頂則不新建)。startActivityForResult 啟動 B,B setResult 返回,由調用方決定跳轉邏輯。核心原則:**不要依賴系統默認返回行為**,在需要精確導航時顯式 finish() + startActivity() 並配合適當 Flag。