2017-01-09 31 views
2

我有關於FragmentTransaction的問題。所以我依靠Fragment中的onDestroyView()onStop()來顯示或隱藏活動底部的工具欄。以下是我做交易:Android - 在刪除最後一個片段之前將片段添加到容器中

getSupportFragmentManager().beginTransaction() 
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
    .replace(R.id.activity_frame, fragment, tag) 
    .addToBackStack(tag) 
    .commit(); 

當我調試,它表明新Fragment經過其onCreateView()替換Fragment經過onDestroyView()onStop()之前。

剛剛發生這種情況,我意識到工具欄顯示出異常行爲,直到今天早上還沒有機會查看它。任何提示?

回答

2

這種行爲的支持庫變更前一陣子,看到https://code.google.com/p/android/issues/detail?id=230415

像在該線程描述您可以切換到舊的行爲:

這是一個預期的行爲改變。有新的功能來優化操作並推遲片段轉換,這是一個副作用。

您可以通過調用FragmentTransaction.setAllowOptimization(false)來禁用片段操作優化。這會迫使所有事情按照正確的順序進行,但也不允許優化操作。

另一種方法是不依賴於onDestroyView()onStop() beeing調用,而是處理已經存在的工具欄上的新片段的onCreateView()。例如,如果工具欄仍然是由自己的片段創建的工具欄,則始終替換onCreateView()中的工具欄並僅刪除onStop()/onDestroy()中的工具欄。

+0

這是它的意圖麼?我認爲是這樣,但我降級了我的支持庫,它不會改變任何東西,我想我沒有足夠的降級。順便說一句,它實際上是活動管理的相同的確切工具欄。我一直把它放在每一個片斷onDestroy或停止,以便它只會用在那個特定的片段,或任何其他需要它的片段.. –

+0

這使得它更簡單。您可以在抽象基本片段中的onCreateView()中控制工具欄的可見性,抽象基本片段定義要爲您的片段實現的抽象布爾showToolbar()方法。只是一些頭腦風暴:) – tknell

+0

嗯,我一直在這樣做大聲笑..從你給出的答案,指出'FragmentTransaction'中有一個新的方法'.setAllowOptimization(false)'使得它都返回正常,謝謝您!哎呀,我從昨天起就沒有接受你的回答,現在是我去別的地方的時候了 –

相關問題