Android Fragment中绑定Activity的新姿势(onAttach)

一般,我们再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中解绑定…

猜你喜欢

转载自blog.csdn.net/qq_37108755/article/details/80453158