2016-02-02 39 views
1

嗨我想保留片段仍然存在,即使它不再顯示。因爲我有一些AsyncTasks去那裏。Android片段setRetainInstance(true)在後臺不工作

首先我增加了起點Fragment

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
fragmentTransaction.add(R.id.fragmentMenu, menuFragment); 
fragmentTransaction.commit(); 

後來我應該活着的片段取代menuFragment

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.fragmentMenu, btFragment).addToBackStack(null).commit(); 

最後我重寫onBackPressed()方法使用popBackStack()

@Override 
    public void onBackPressed() { 
     if(getFragmentManager().getBackStackEntryCount() != 0){ 
      getFragmentManager().popBackStackImmediate(); 

     }else{ 
      super.onBackPressed(); 
     } 
    } 

在我的btFragment裏面,即使我彈出另一個片段,我在onCreate()方法中設置了setRetainInstance(true),它應該保持活着。 但是一旦我彈出了後臺,它就會被破壞。

我做錯了什麼? THX

+0

爲什麼downvote? –

+0

它最好在活動中運行異步任務和加載器任務,而不是在片段中運行。最好不要依賴片段來保存任何數據。將它保留在活動中,並讓片段在片段恢復時從活動中獲取。 – Thilek

回答

0

我用一點解決方法解決了它。如果有人對此感興趣,這裏是代碼。

// little work-around to not let btFragment die. 
     Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentMenu); 
     if (fragment instanceof BTFragment) { 
      getFragmentManager().beginTransaction().hide(fragment).add(R.id.fragmentMenu, menuFragment).commit(); 

     } else if (getFragmentManager().getBackStackEntryCount() != 0) { 
      getFragmentManager().popBackStackImmediate(); 
     } else { 
      super.onBackPressed(); 
     } 

基本上我躲在刪除它通過檢查FrameLayout當前片段,我可以處理不同的碎片和碎片來代替。通過這種方式,我的btFragment上不會調用onDestroy()方法。

0

setRetainInstance()爲文檔解釋說,它僅適用於活動娛樂:

控制片段實例是否跨過活動保留 娛樂(例如從配置改變)

+0

感謝您的解釋。我發現了一種保持片段活着的方法。 –

相關問題