Activity,Fragment互相调用几种写法,

一,Fragment操作acitivity中控件或者给acitivity传值,

1,官方推荐写法,接口回调

Fragment中的写法:

  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(String data);
    }

对应依附的activity写法:

实现上面的接口即可;

在Fragment调用接口里面的方法即可控制activity中的控件或者传值给acitivity,

2,强制类型转换法

Activity写法:

在Activity中创建一个public方法:

public void fragmentChangeAcitivity(String data){
        //操作acitivity
    }
Fragment写法:

在你需要给acitivity传值的位置执行下列代码:

if (getActivity()!=null){
            ((绑定的acitivity)getActivity()).fragmentChangeAcitivity("值");
        }
即可控制acitivity

3,三方库,Eventbus实现,具体怎么实现百度Eventbus用法

4,自定义观察者模式

5,广播

6,将Activity中的对应控件命名成静态。

总结,推荐使用第1中方法,官方写法,解耦最好。第2种方法写起来最简单,第3中写法见仁见智,第4,5种写法大材小用了,第6种写法,这么说吧,最不推荐。

二,Activity控制Fragment或者修改Fragment的控件的值,这个就简单多了,这个跟上面的第2点写法基本一样,在Fragment中定义一个public方法,然后调用该方法既可以,但要判断一下Fragment的控件是不是为空。

Fragment写法:

 public void activityChangeFragment(String data){
        //传值,或者修改控件的值
//        if(控件!=null){
//            对应操作
//        }
    }

Activity写法:

//对应Fragment.activityChangeFragment(String data);即可





你可能感兴趣的:(android)