Fragment 常见问题
2017-08-26 本文已影响0人
指尖流逝的青春
Fragment的onAttach()方法不被调用问题
在Fragment与宿主Activity通过接口传递数据的时候,需要一个接口。
- 让这个接口作为Fragment的内部成员
- 让宿主Activity实现这个接口
但是在Fragment中:
如果继承的是:android.app.Fragment
而不是: android.support.v4.app.Fragment;
那么在onAttach()方法中传递的参数如果为Context而不是Activity,那么Fragment在初始化的时候就不会走onAttach()方法,而接口又是在onAttach()方法里面实例化的,所以执行代码以后一直会报这个自定义的接口空指针。
@Override
public void onAttach(Context context) {//onAttach方法有两个重载,一个传递的参数是Activity,一个是Context,传递参数为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实现了MyListener接口
mylistener = (MyListener) context;//实例化该接口
}
//或者捕获异常
// try {
// mylistener = (MyListener) context;
// } catch (ClassCastException e) {
// throw new ClassCastException(context.toString() + "包含该Fragment的Activity必须实现MyListener接口");
// }
}
/**
*
* 如果使用的是 android.app.Fragment;而不是android.support.v4.app.Fragment;
* 则需要传递参数为Activity
* @Override
* public void onAttach(Activity activity) {
* super.onAttach(activity);
* if (activity instanceof MyListener) {
* mylistener = (MyListener) activity;
* }
* }
*/