2

在我的應用程序的主要部分,我有兩個片段一次打開。儘管只有一個顯示。正確的方式來處理顯示和隱藏片段的生命週期?

第二個片段是從第一個片段的onCreateView方法創建的,因爲第二個片段用於控制第一個片段。

 Bundle args = new Bundle(); 
     args.putInt(ReferenceSelectorFragment.ARG_TAB_INDEX, Tab.BOOK.position); 
     mReferenceSelectorFragment.setArguments(args); 
     fm.beginTransaction() 
       .add(container.getId(), mReferenceSelectorFragment, FRAGMENT_TAGS[0]) 
       .hide(mReferenceSelectorFragment) 
       .commit(); 

我正確地隱藏和顯示使用片段事務的片段:

getActivity().getSupportFragmentManager().beginTransaction() 
       .setCustomAnimations(R.anim.up_in, R.anim.up_out, R.anim.down_in, R.anim.down_out) 
       .hide(ReaderFragment.this) 
       .show(mReferenceSelectorFragment) 
       .addToBackStack(null) 
       .commit(); 

這個奇妙的作品,如預期,除了一個微小的缺陷。 當應用程序被最小化一段時間並且操作系統關閉了進程時,當應用程序再次打開時,試圖恢復先前的狀態,兩個碎片都會在彼此之上被恢復。兩者的含義同時出現在彼此之上。(這可以通過按應用上的主頁按鈕來複制,然後使用DDMS來終止正在運行的進程)。

我試過所有檢測到這一點並解決這個問題,但它證明很難通過編程來區分旋轉和退出過程後正在恢復的應用程序。 處理顯示和隱藏碎片的生命週期的正確方法是什麼?

回答

0

這可能會幫助你:https://stackoverflow.com/a/13306633/969325

基本上,你可以在你的活動super.onCreate(savedInstanceState)傳遞一個空包;或者只在它們尚不存在時才創建新的片段。我懷疑這是你的問題。