我們在使用Fragment的時候經常需要傳遞Context類型的參數,而Fragment自己又不是一個Context類型的對象,於是我們有下面兩種方法獲取Context對象。
一、兩種方法介紹
1.this.getActivity()(可以不寫this.)
在Fragment中直接調用getActivity()方法,可以直接得到Fragment依附的Activity,而Activity是一個Context類型的對象。
2.獲取Application對象
如下自己寫一個MyApplication類繼承Application,通過getInstance獲取一個Application類型的對象,也是Context對象。
public class MyApplication extends Application { private MyApplication mInstance; public static void getInstance(){ if(mInstance == null){ mInstance = new MyApplication(); } return mInstance; } }
二、兩種方法比較
1.this.getActivity()
- 優點:不需要寫MyApplication類
- 缺點:
Fragment很容易被銷毀,調用getActivity()方法會報空指針錯誤(注意:並不是getActivity()返回值為null,而是this.getActivity()中的this,也就是Fragment自己是null,因為它已經被銷毀了)
2.獲取Application對象
- 優點:不會遇到類似
this.getActivity()的空指針問題 - 缺點:某些情況下的
Context必須是Activity,特別是實例化Dialog等需要依附於一個Activity的可視化的對象時傳參必須是Activity對象(Toast是Android的一種通知機制,不需要依附於Activity)
