媒介
在平常開辟中的時刻,我們常常會應用ViewPager+Fragment
停止視圖滑動,在某些部門邏輯或許我們須要應用高低文Context
(例如根本的Toast
),然則因為Fragment
只是依靠在Activity
容器的一個試圖,假如須要拿到以後的Activity
的高低文Context
就必需經由過程getActivity()
獲得。
但是,不曉得列位法式猿有無遇過湧現getActivity()湧現null的時刻招致法式報出空指針異常。
其實緣由可以歸結於由於我們在:
(一)切換fragment的時刻,會頻仍被crash
(二)體系內存缺乏
(三)反正屏幕切換的時刻
....
以下情況都邑招致Activity
被體系收受接管,然則因為fragment
的性命周期不會跟著Actiivty
被收受接管而被收受接管,是以才會招致getActivity()湧現null的成績。
處理
這裡總結三個處理辦法:
(一)樹立Context援用
起首我們看下Fragment
的性命周期:
在Fragment
的性命周期中,在性命周期處於onAttach()
和onDetach()
之間的時刻getActivity()
辦法才不會前往null
。是以我們可以在fragment
初始化的時刻樹立Context
援用。
在fragment
燒毀的時刻燒毀援用。
代碼以下:
@Override public void onAttach(Activity activity) { super.onAttach(activity); mCtx = activity;//mCtx 是成員變量,高低文援用 } @Override public void onDetach() { super.onDetach(); mCtx = null; }
(二)公道應用getapplicationcontext()
在辦法1中應用暫時變量存儲Context
高低文援用可以或許必定水平處理成績。因為在Android中,Application
、Service
、Activity
都具有高低文,getapplicationcontext()
可以獲得全局的高低文,所以只需法式不封閉,獲得的context
很難為null
~
(三)自界說本身的application
第三種辦法其實與第二種辦法根本道理雷同,行將自界說的application
中,暫時存儲application
具有的高低文Context
。在法式中,經由過程單利拜訪application
的時刻獲得該高低文Context
。
詳細應用以下:
(1)在設置裝備擺設清單注冊本身的application
<application Android:name=".MyApplication" Android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
(2)在Application中的onCreate存儲高低文,而且創立單利。
public class MyApplication extends Application { private static MyApplication instance; @Override public void onCreate() { super.onCreate(); instance = this;//存儲援用 } public static MyApplication getInstance(){ return instance; } }
總結
這裡只是我總結的幾個處置辦法,固然有其他開辟者有更好的建議可以或許提出來,如許更好。年夜家一路技巧分享,讓年夜家配合提高!
【Android中getActivity()為null的處理方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!