一般,我们再Fragment中使用context都是使用getActivity()方式,获取父Activity基本都是使用(FatherActivity)getActivity()方法;但是再实际开发中,我碰到过好几次取空的现象,非常的不稳定,其实Fragment和Activity还有一种更加稳定的通信方式,先看下面这一段代码:
private OnFragmentInteractionListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
上面这一段是AS自动创建的BlankFragment里面的代码, onAttach方法是再Fragment与Activity建立联系的时候调用的,而onDetach方法是再解除联系的时候调用的,在这里,我们可以模仿这一段的逻辑:
让绑定该Fragment的Activity实现OnFragmentInteractionListener 接口,然后再Fragment的onAttach中进行绑定再变量mListener中,这样,我们每次使用context就可以用如下方式:
(FatherActivity)mListener;
而这样做还有一个好处就是:获取父类方便了,当在fragment中需要将操作交给父类更加方便了,我就遇到过在fragmentA中嵌套了View Pager+FragmentB的情况,当时是需要在FragmentB中操作FragmentA,我的做法是FragmentA的父Activity实现FragmentB的监听,然后再在FragmentB中获取activity操作FragmentA以实现需求。
对了,记得在onDetach中解绑定…