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

2 篇文章 0 订阅
2 篇文章 0 订阅

今天在使用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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值