Fragment中getActivity返回null的问题

项目中有个问题,一直报一个fragment为空,即空指针异常,刚开始我以为只要有Activity存在Fragment中getActivity就不会为null,所以怎么也找不出原因。
后来才知道。。原来报这个错误是因为在后台运行的时候,这个fragment依附的Activity因系统内存不足被回收了,所以getActivity为null。

解决方法:

1:在使用Fragment的Activity 中重写onSaveInstanceState 方法,将super.onSaveInstanceState(outState) 注释掉,让其不再保存Fragment 的状态,达到其随着MainActivity 一起被回收的效果。

方案2:在再次启动Activity 的时候,在onCreate 方法中将之前保存过的fragment 状态清除,代码示例如下:
if(savedInstanceState!= null)
{
//FragmentActivity的onSaveInstanceState方法可以看到,fragment保存时的标签是android:support:fragments
             String FRAGMENTS_TAG = "android:support:fragments";
             savedInstanceState.remove(FRAGMENTS_TAG);
 }

3:避免使用getActivity 方法得到activity,如果确实需要使用上下文,可以写一个类MyApplication继承Application,并且写一个方法getContext(),返回一个Context 对象。代码示例如下:
public class MyApplication extends Application {
    private static Context context;
   @Override
    public void onCreate() {
        super.onCreate();
         context = this;

    public static Context getContext() {
        return context;
     }

猜你喜欢

转载自blog.csdn.net/keep_my_mine/article/details/79509753