您的位置:首页 > 移动开发 > Android开发

我的android异常系列——Fragment XXX not attached to Activity

2017-07-21 17:12 531 查看
我的异常系列目录为:http://www.jianshu.com/p/cb10697226ef

直接切入主题。出现这个问题后,我们定位到代码中的位置一般是getString或者getResources导致的!

既然是Fragment出现的问题。我们直接定位到Fragment的源代码,检索错误的字符串,马上我们可以看到Fragment的getResources()方法(getString最终也会调用这个方法),如下

/**
* Return <code>getActivity().getResources()</code>.
*/
final public Resources getResources() {
if (mHost == null) {
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
}
return mHost.getContext().getResources();
}


从上面的代码中我们可以明白,抛出异常的原因是mHost == null,而这个mHost会在Fragment被回收后置为null(详细的细节可以查看FragmentManager这个类),出现这种状况是由于我们退出当前Fragment后某个线程还调用getString等方法

所以如果Fragment被回收后我们再调用这个方法,就会抛出这个异常

解决方案:

1.错误已经和明显的指出not attached to Activity了,所以我们在调用getString等方法前需要判断一下Fragment是否已经add到Activity中(通过Fragment的isAdded方法)

2.直接在Fragment创建的时候通过getActivity获取Activity上下文对象赋值给成员变量,后面直接用即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 异常 源代码