Fragment的onAttach()方法不被調(diào)用問題
在Fragment與宿主Activity通過接口傳遞數(shù)據(jù)的時候丰包,需要一個接口。
- 讓這個接口作為Fragment的內(nèi)部成員
- 讓宿主Activity實現(xiàn)這個接口
但是在Fragment中:
如果繼承的是:android.app.Fragment
而不是: android.support.v4.app.Fragment;
那么在onAttach()方法中傳遞的參數(shù)如果為Context而不是Activity垦巴,那么Fragment在初始化的時候就不會走onAttach()方法媳搪,而接口又是在onAttach()方法里面實例化的,所以執(zhí)行代碼以后一直會報這個自定義的接口空指針魂那。
@Override
public void onAttach(Context context) {//onAttach方法有兩個重載,一個傳遞的參數(shù)是Activity稠项,一個是Context涯雅,傳遞參數(shù)為context的在一些Android版本上面由bug,(如果是使用的Fragment包展运,而不是v4.support.fragment包就會有);
super.onAttach(context);
//This makes sure that the container activity has implemented the callback interface. If not, it throws an exception
//加入判斷:
if (context instanceof MyListener) {//如果該Fragment Attach的Activity實現(xiàn)了MyListener接口
mylistener = (MyListener) context;//實例化該接口
}
//或者捕獲異常
// try {
// mylistener = (MyListener) context;
// } catch (ClassCastException e) {
// throw new ClassCastException(context.toString() + "包含該Fragment的Activity必須實現(xiàn)MyListener接口");
// }
}
/**
*
* 如果使用的是 android.app.Fragment;而不是android.support.v4.app.Fragment;
* 則需要傳遞參數(shù)為Activity
* @Override
* public void onAttach(Activity activity) {
* super.onAttach(activity);
* if (activity instanceof MyListener) {
* mylistener = (MyListener) activity;
* }
* }
*/