項目報錯:Fragment not attached to a context.

近日,發現項目報錯如下:

java.lang.IllegalStateException: Fragment FortuneFragment{179d1cbc} not attached to a context. at android.support.v4.app.Fragment.requireContext(Fragment.java:696)

測試的時候沒有測出這個問題,所以也就沒想到會在這個地方報錯。項目中報錯的地方如圖所示:

這個方法定義在Fragment中。

在Activity重建的時候,假如fragment還在使用諸如context,就會出現這個問題,比如說突然橫屏,fragment裏面正在訪問網絡接口,使用了  new ProgressDialog(context, R.style.waitting_dialog);來進行等待,就會崩潰,Fragment not attached to a context。可以在fragment內部,使用isAdded()來判斷是否fragment和activity綁定。

而當前項目中,沒有橫屏,也不是訪問網絡,稍微有點不同。但問題的本質原因是一致的。

在getResources()時需要Context,而這時Fragment可能與Activity不在綁定狀態,所以在Fragment處理異步操作時,一定要記着加判斷:isAdded()。確保不會出問題。

至此,問題解決!