當我們快速點選某個按鈕彈出一個DialogFragment的時候,有時候就會出現這個異常,可以通過debug能複現這個異常
####解決方法####
if (dialogFragment == null) {//初始化DialogFragment
dialogFragment = DialogFragment.getInstance();
}
if (!dialogFragment.isAdded()) {// 判斷是否已添加
dialogFragment.show(getSupportManager(),
DialogFragment.getClass.getName);
}
// 在BaseDialogFragment裡面重寫show方法,注意最後一句是重點
public void show(FragmentManager manager) {
String tag = getClass().getName();
show(manager, tag);
manager.executePendingTransactions();
}
完美解決
20181107更新,上次修改之後,上線,結果還特麼報這個錯了,啪啪打臉。
網上解釋的原因是activity不在前台,然後調用onSaveInstanceState方法的時候,這個時候再調用fragment的show方法,導緻奔潰。解決方法是在show方法裡面不用commit,而使用commitAllowStateLoss代替。
如何觸發并測試這個bug呢?用Handler延遲10s顯示一個dialogFragment,然後點傳回鍵,這樣就會出現這個異常,進而确定是否真的解決了。
另外一種方案是
`override fun show(manager: FragmentManager?, tag: String?) {
if (manager == null)
return
if (Integer.valueOf(android.os.Build.VERSION.SDK) > Build.VERSION_CODES.JELLY_BEAN) {
if (manager.isDestroyed)
return
}
try {
super.show(manager, tag)
} catch (e: Exception) {
e.printStackTrace()
}
}
感謝
原文連結