我有3個活動的應用程序:Android的後退按鈕行爲通過活動/片段歷史可以追溯到當
- StartActivity:處理登錄的東西,如果一切正常
- MainActivity開始在MainActivity:擁有NavigationDrawer和用戶可以瀏覽應用程序。所有內容都顯示在片段中,由MainActivity啓動
- SearchableActivity:MainActivity的ActionBar具有一個搜索動作,它啓動一個搜索查詢。此查詢發送到這個活動,這只是顯示一些搜索結果
問題: 按後退按鈕不回去通過碎片的歷史,但我認爲它應該這樣做。該MainActivitiy使用以下方法來啓動新的片段:
protected void displayFragment(Fragment fragment) {
getFragmentManager()
.beginTransaction()
.replace(R.id.mainContentLayout, fragment)
.addToBackStack(null)
.commit();
}
而不是打開最後一個片段中,應用程序只是打開最後一次活動(在MainActivity總是StartActivity的情況下)。
我做錯了什麼,如果我只是想要「默認行爲」,而沒有黑客自己的解決方案?
我開始實施自己的解決方案來破解:MaiNActivity覆蓋onBackPressed函數並手動彈出堆棧中的最後一個片段。當計數太小時,我完成了應用程序,這樣我的StartActivity不會再被調用。但是,如果我想從SearchableActivity中返回例子,這不起作用。
@Override
public void onBackPressed() {
FragmentManager fragmentManager = getFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
if (count > 0) {
fragmentManager.popBackStackImmediate();
} else {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
}
這對我有什麼幫助? – akohout