安卓学习笔记---fragment不断切换app崩溃的解决办法

转载博客地址:

http://blog.csdn.net/u014727709/article/details/53519937


fragment是大家项目都会用到的,一般都是用来做选项卡的切换,切换时候每次都要进行网络请求,可是切换太快的话,网络请求还没完成就到下一个fragment了,这里记录一下使用fragment出现的错误以及解决办法。 
错误信息1: 
07-29 10:11:40.009: ERROR/AndroidRuntime(643): Caused by: java.lang.NullPointerException 
07-29 10:11:40.009: ERROR/AndroidRuntime(643): atAndroid.view.LayoutInflater.from(LayoutInflater.java:171) 
07-29 10:11:40.009: ERROR/AndroidRuntime(643): at com.liumeng.adapter.MyListAdapter.(MyListAdapter.java:23) 
解决办法: 
1、在onCreatView里面执行初始化操作 
2、context使用之前判空 
3、当出现这个问题时,只要在Fragment 中声明一个上下文类型的成员变量,并在onAttach()方法中将getActivity()的值赋给变量,在Fragment中使用到getActivity()时,都是用context即可。也就是说在将Fragment挂载到Activity时,就获得到了这个activity,并将这个activity保存起来了,这样就可以直接使用而不需要每次使用时都调用一遍getActivity()了。 
4、MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果! 
错误信息2: 
这里写图片描述

解决办法: 
是在使用FragmentTransition的 commit方法添加一个Fragment的时候出现的,后来在官网找到了相关的 
说明:http://developer.Android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss()
public abstract int commitAllowingStateLoss () Added in API level 11 Like commit() but allows the commit to be executed after an activity’s state is saved. This is dangerous because the commit can be lost if the activity needs to later be restored from its state, so this should only be used for cases where it is okay for the UI state to change unexpectedly on the user.

大致意思是说我使用的 commit方法是在Activity的onSaveInstanceState()之后调用的,这样会出错,因为onSaveInstanceState 
方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存玩状态后再给它添加Fragment就会出错。解决办法就 
是把commit()方法替换成 commitAllowingStateLoss()就行了,其效果是一样的。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值