近日,发现项目报错如下:
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()。确保不会出问题。
至此,问题解决!