2015-04-28 43 views
4

我沒有使用ViewPager,而且我正在調用任何Fragment事務的唯一地方是點擊活動佈局中導航欄上的按鈕。切換片段太快會導致:java.lang.IllegalStateException:No activity

當我太迅速切換到片段(如來回),我得到這個異常:

java.lang.IllegalStateException:沒有活動

這似乎是,當我點擊切換另一個Fragment,而第一個尚未完全加載完成。我正在使用FragmentActivity

任何人都可以對此有所瞭解嗎?

我的代碼切換Fragment S:

fragmentManager.beginTransaction() 
    .replace(R.id.container, old, 
     fragment.getClass().getSimpleName()) 
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit(); 

編輯: 取出過渡解決了這個問題,但我不知道是否有一種方法,在地方過渡要做到這一點。我的理論是,轉換會延遲片段生命週期,並在另一個片段事務啓動時導致activity爲null。

+0

你看過https://stackoverflow.com/a/17131382/603270 https://stackoverflow.com/a/15656428/603270? – shkschneider

+0

@shkschneider我已經看過這些。顯然,這是一個新的支持庫的錯誤,但我沒有在這裏使用小孩片段管理器。這只是一個基本的應用程序,可通過活動中的按鈕訪問4個屏幕。 – sihrc

+0

我認爲你的問題與獲取onAttach上下文有關,你是否試圖在以後獲取上下文?例如onActivityCreated – Rarw

回答

4

今天遇到同樣的問題。原來是說我緩存我的片段(這是完全合法的),但我已經刪除/儘快加入它(的時候依然動畫)

請檢查:old.isRemoving()調用.replace(R.id.container, old)

true意味着它仍然是前在使用和重新添加它會觸發問題。在這種情況下,您應該創建一個新的片段實例。

我的猜測是我試圖重新添加一個片段,而它仍然在爲其移除動畫,所以需要兩個片段實例。