相关文章推荐
重情义的甘蔗  ·  BluetoothLeAdvertiser. ...·  1 年前    · 
温暖的长颈鹿  ·  python sqlalchemy ...·  1 年前    · 
精彩文章免费看

解决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();