呼和浩特公司网站制作,wordpress 七牛云上传,做付费软件网站,北京手机模板建站在日常开发中的时候#xff0c;我们经常会使用ViewPagerFragment进行视图滑动#xff0c;在某些部分逻辑也许我们需要利用上下文Context#xff08;例如基本的Toast#xff09;#xff0c;但是由于Fragment只是衣服在Activity容器的一个试图#xff0c;如果需要拿到当前的… 在日常开发中的时候我们经常会使用ViewPagerFragment进行视图滑动在某些部分逻辑也许我们需要利用上下文Context例如基本的Toast但是由于Fragment只是衣服在Activity容器的一个试图如果需要拿到当前的Activity的上下文Context就必须通过getActivity()获取。 然而不知道各位程序猿有没有遇过出现getActivity()出现null的时候导致程序报出空指针异常。其实原因可以归结于因为我们在一切换fragment的时候会频繁被crash二系统内存不足三横竖屏幕切换的时候.... 以上情况都会导致Activity被系统回收但是由于fragment的生命周期不会随着Actiivty被回收而被回收因此才会导致getActivity()出现null的问题。 解决 这里总结三个解决方法 一建立Context引用 首先我们看下Fragment的生命周期 fragment 生命周期.jpg 在Fragment的生命周期中在生命周期处于onAttach()和onDetach()之间的时候getActivity()方法才不会返回null。因此我们可以在fragment初始化的时候建立Context引用。在fragment销毁的时候销毁引用。代码如下 Overridepublic void onAttach(Activity activity) {super.onAttach(activity);mCtx activity;//mCtx 是成员变量上下文引用}Overridepublic void onDetach() {super.onDetach();mCtx null;}二合理利用getapplicationcontext() 在方法1中使用临时变量存储Context上下文引用能够一定程度解决问题。由于在Android中Application、Service、Activity都拥有上下文getapplicationcontext()可以获取全局的上下文所以只要程序不关闭获取的context很难为null~ 三自定义自己的application 第三种方法其实与第二种方法基本原理相同即将自定义的application中临时存储application拥有的上下文Context。在程序中通过单利访问application的时候获取该上下文Context。具体使用如下 1在配置清单注册自己的application applicationandroid:name.MyApplicationandroid:icondrawable/ic_launcherandroid:labelstring/app_name 2在Application中的onCreate存储上下文并且创建单利。 public class MyApplication extends Application {private static MyApplication instance;Overridepublic void onCreate() {super.onCreate();instance this;//存储引用}public static MyApplication getInstance(){return instance;}
}