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