在调用Fragment.setListShown()报java.lang.IllegalStateException: Content view not yet created的错误

来源:互联网 发布:软件用户手册模板 编辑:程序博客网 时间:2024/05/21 18:32

今天在使用ActionBar在NAVIGATION_MODE_TABS模式下的导航时,调用了actionBar.setSelectedNavigationItem(1),fragment中访问网络的fragment发生了java.lang.IllegalStateException: Content view not yet created异常,没办法,只是百度,google,大部分的原因都是说setEmptyText()这个方法报了错,当然,这个方法也有可能报错,但是我的不是,经过一个上午的调试,查找,终于将问题解决,现将解决问题的过程描述下,希望对大家有帮助。

在使用tab导航过程中,使用ActionBar.TabListener这个监听接口,当然我实现了这个方面,在两个关键的方法如下:

public void onTabSelected(Tab tab, FragmentTransaction ft) {            if (mFragment == null) {                mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);                ft.add(android.R.id.content, mFragment, mTag);            } else {                ft.attach(mFragment);            }}        public void onTabUnselected(Tab tab, FragmentTransaction ft) {            if (mFragment != null) {                ft.detach(mFragment);            }        }

在调用actionBar.setSelectedNavigationItem(1)这个方法过程中,先调用了第0个tab,导致第0个fragment被实例化,也就是调用了onTabSelected这个方法,然后再加载第1个Fragment,也会调用onTabSelected,但你同时会调用onTabUnselected,将前一个fragment detach掉,但是在第0个fragment中有访问网络的操作,也就是这个fragment被detach掉,但是网络访问并没有中断,等网络请求返回的时候我调用了setListShown()显示内容,但是这个时候fragment已经不在activity里了,所以报java.lang.IllegalStateException: Content view not yet created,这个错误。

解决方法:在fragment中的onDestroyView中中断访问网络访问,就好了

总结:我们可能要在fragment中很多的操作,比如访问网络,读取文件等耗时操作,等这这些操作完成的时候,我们要显示相应的view,但有可能我们没有等他们完成就进行了切换导致fragment的detach,但是这些耗时操作并不会同时中断,它会一值执行,等它执行完成,操作相应的view的时候,但是这个view已经不存在了所以报java.lang.IllegalStateException: Content view not yet created这个异常。所以我们要在onDestroyView中作相应的销毁操作。在已经被detach的fragment中执行任何关于view的操作,都会报这个异常,这点切记。

大家有什么疑问,或者我有什么错误的欢迎大家给我留言。

0 1
原创粉丝点击