解决Fragment中调用getActivity()为null--全局获取Context
在使用Fragment的时候经常会遇到getActivity()为null的情况。主要原因是Fragment的生命周期问题。(注意:并不是getActivity()返回值为null,而是this.getActivity()中的this,也就是Fragment自己是null,因为它已经被销毁了)
加空指针判断规避,无法真正解决问题。这里我们采取的解决办法是获取全局的context,这样不管什么时候都不会为null。
实现步骤:
1.自定义一个类继承Application类
public class MyApplication extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
//获取context
mContext = getApplicationContext();
//创建一个静态的方法,以便获取context对象
public static Context getContext(){
return mContext;
2.在Manifest添加一句语句:
android:name=".util.MyApplication"
这种解决方案也有问题,某些情况下的Context必须是Activity,特别是实例化Dialog等需要依附于一个Activity的可视化的对象时传参必须是Activity对象(Toast是Android的一种通知机制,不需要依附于Activity)
三、两全其美的解决方案
1.MyApplication是一定要写的
2.写一个如下的BaseFragment类:所有的Fragment都继承这个BaseFragment,直接通过getContext()方法即可得到Context对象,当然实例化Dialog等需要依附于Activity的对象时,还是老老实实的getActivity()吧
public class BaseFragment extends Fragment {
private Activity activity;
public Context getContext() {
if (activity == null) {
return MyApplication.getContext();
return activity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();