2013-07-04 47 views
1

這有點難以用單詞和片段來解釋。所以我準備了一個簡單的項目來重現問題。爲什麼setCustomAnimations在嵌套分段事務後仍然存在

Download(文件 - >下載)

在初始運行,你看Activity A,託管Fragment F,這反過來又承載了更多的分片嵌套Fragment F1。當你按片段F按鈕,你會看到Fragment F1與動畫(我故意讓動畫慢,所以你可以看到後面的問題)轉換到Fragment F2

現在按設備上的後退鍵,您將看到Fragment F2轉換回Fragment F1。 (感謝addToBackStack)一切正常,現在按活動A按鈕。您將看到Fragment F轉換爲Fragment X

現在請按下後退鍵,請注意。按預期方式,您將看到Fragment X轉換回Fragment F。然而,似乎現在是活動嵌套片段(無論是Fragment F1Fragment F2,這取決於哪一個是可見的)也轉變和來自先前setCustomAnimations調用設置的動畫!

我的印象是,setCustomAnimations只適用於FragmentTransaction,而不是整個片段。

回答

0

我不確定這是否正確。如果有人有更好的想法,請讓我知道。

Fragment類有一個名爲mNextAnim的字段用於存儲其動畫ID。

// If app has requested a specific animation, this is the one to use. 
int mNextAnim; 

android.support.v4.app.BackStackRecordFragmentTransaction內部實現類。在交易過程中,它會將mNextAnim字段設置爲適當的動畫ID,但不會在事後清除。

Field na = Fragment.class.getDeclaredField("mNextAnim"); 
na.setAccessible(true); 
na.set(fragF1, 0); 
相關問題