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

来源:互联网 发布:手机p正装照软件 编辑:程序博客网 时间:2024/06/06 02:02

一,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);即可





原创粉丝点击