我的Activity中有一個偵聽器,在另一個線程完成網絡請求後,替換一個Fragment。因此,這偵聽器調用的代碼行是這樣的:何時使用FragmentManager.isDestroyed()?避免IllegalStateException?
getFragmentManager().beginTransaction().replace(R.id.container, fragment, fragmentTag).commit();
的提交()在這行代碼偶爾拋出IllegalStateException。根據the docs,
事務只能在其包含活動保存其狀態之前使用此方法提交。如果在該點之後嘗試提交,則會拋出異常。這是因爲如果活動需要從其狀態恢復,則提交後的狀態可能會丟失。有關可能會丟失提交的情況,請參閱commitAllowingStateLoss()。
雖然看着這個,我碰到了FragmentManager.isDestroyed()方法。 javadoc閱讀:
如果最終的Activity.onDestroy()調用已在FragmentManager的Activity上進行,則返回true,所以此實例現在已經死亡。
我想我只是對FragmentManager的Activity實例的影響感到困惑。什麼時候應該使用FragmentManager.isDestroyed()?在提交替換FragmentTransaction之前檢查它是否會避免IllegalStateException?
你應該張貼您的logcat錯誤 –
我一直在經歷着同樣的事情......我發現,這是完全正確的:在我所有的情況下,FragmentManager.isDestroyed()返回true,則FragmentTransaction.commit( )會拋出IllegalStateException。事實上,首先檢查.isDestroyed()將幫助您避免異常,但是您也不會執行Fragment事務。 – alpartis
@alpartis我會添加一些更好的日誌記錄,並查看當我得到IllegalStateException時FragmentManager.isDestroyed()返回true。儘管您的評論似乎足以成爲答案。如果你把它作爲一個發佈,而沒有人在一段時間內發佈更好的,我會接受它。 – pumpkinpie65