1.直接调用
((MainActivity)getActivity()).dosomething();
2.使用接口回调
编写接口interface
public interface FragmentBackListener {
void dosomething();
}
fragment中的attach方法中
// 当fragment被加载到activity的时候会被回调
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(activity instanceof FragmentBackListener ) {
listener = (FragmentBackListener )activity; // 2.2 获取到宿主activity并赋值
} else{
throw new IllegalArgumentException("activity must implements FragmentBackListener ");
}
}
//fragment按钮点击时
// listener.dosomething() 通知activity进行数据交互逻辑处理
activity中实现 interface接口
public class TeacherJoinActivity extends BaseActivity implements FragmentBackListener{
@Override
public void dosomething(int position) {
Log.d("MyInfo","接收下一步返回的操作"+position);
changeFragment(position);
}
}
3.使用广播
优点:
- 非常灵活
缺陷:
- 广播性能肯定会差(不要和我说性能不是问题,对于手机来说性能是大问题)
- 传播数据有限制(必须得实现序列化接口才可以)
4.EventBus
- EventBus是用反射机制实现的,性能上会有问题(不要和我说性能不是问题,对于手机来说性能是大问题)
- EventBus难于维护代码
- 没法获取Activity的返回数据
综上,我认为接口回调是一种比较合适的方案。
这种方案应该是既能达到复用,又能达到很好的可维护性,并且性能也是杠杠的。但是唯一的一个遗憾是假如项目很大了,Activity与Fragment的数量也会增加,这时候为每对Activity与Fragment交互定义交互接口就是一个很头疼的问题(包括为接口的命名,新定义的接口相应的Activity还得实现,相应的Fragment还得进行强制转换)。
相关文章:
【Fragment精深系列4】Fragment与Activity之间的数据交互
Android:Activity与Fragment通信(99%)完美解决方案