2014-04-02 17 views
0

我有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); 
    } 
} 

回答

0

其實,這是很容易的。如果FragmentManager堆棧中的計數小於一,我可以簡單地調用

super.onBackPressed() 

這隻會彈出下一個活動在後面堆棧。這樣,當用戶按下後退按鈕時,只要有碎片,我就彈出碎片,當碎片碎片堆棧爲空時,我開始彈出活動。

0

覆蓋的onkeydown()和處理事件

+0

這對我有什麼幫助? – akohout

相關問題