2015-06-21 57 views
-2

我有一個MainActivity,它根據按下的特定按鈕啓動片段。當我在一個片段下,然後按下後退按鈕時,應用程序將被關閉。我的想法是,當按下後退按鈕時,我將用全部按鈕顯示MainActivity。我在MainActivity中編寫這些代碼行:如何從切片切換回MainActivity?

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     recreate(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

這是一個很好的解決方案嗎?它工作得很好,唯一的事情是在片段佈局事務和活動佈局之間,有一個不到半秒的黑屏。有沒有辦法解決它?

+0

可以共享此重新創建的代碼()?此外,您可以使用片段管理器來替換片段 – droidx

+0

recreate();方法可以通過Android,它不是我的。我也可以直接從片段傳遞給另一個片段嗎? –

+0

Ahh ..我剛剛閱讀了關於重新創建方法..它導致此活動被重新創建一個新的實例。所以,這不是推薦的方式,是的,你可以通過使用接口與其他片段進行通信。查看本文檔。 http://developer.android.com/training/basics/fragments/communicating.html – droidx

回答

2

當您添加片段時,將其添加到backStack。後按將自動恢復片段並顯示您的主要活動。

如:

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(..............); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 
+0

爲什麼你放置null?這是什麼意思 ? –

+0

它只是一個標籤。爲了記住放置什麼片段電流,您可以使用該標籤。它不是強制性的,如果你不想要標籤或不想記住什麼是當前片段,你可以使用null。在複雜的系統中,將使用一個片段夾持器來顯示多個片段。所以在這種情況下,很難找到目前的片段,並知道我們使用這些標籤。 –

+0

Bu的方法addToBackStack(null)還保存Activity,哪個提交/執行片段? –