一、Activity控制Fragment或者修改Fragment的控件的值
在Fragment中定义一个public方法,然后调用该方法既可以,注意:不要忘了判断一下Fragment的控件是不是为空。
public void activityChangeFragment(String data) {
}
然后在Activity调用
commodityInformFragment.activityChangeFragment("data");//commodityInformFragment:对应的Fragment
二、Fragment中使用父Activity的属性和方法
1.强制类型转换(最简单)
在Activity中创建一个public方法:
public void goShopping(int i){
commodityPager.setCurrentItem(i);
}
在需要给acitivity执行下列代码:
if(getActivity() != null){
((CommodityActivity) getActivity()).goShopping(2);//CommodityActivity是绑定fragment的activity
}
2.官方推荐写法,接口回调(推荐,解耦最好)
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实现上面的接口即可
3.使用三方库,Eventbus实现,具体怎么实现百度Eventbus用法
4.广播
5.使用观察者模式
6.将Activity中的对应控件命名成静态(最不推荐)
网友评论