Android开发Fragment与Activity之间的数据交互

释放双眼,带上耳机,听听看~!

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%)完美解决方案

人已赞赏
Android文章

android开发半透明图层用户引导、用户指导、用户教导,教用户怎么使用app的页面制作

2020-1-26 20:05:34

Android文章

Android开发RecyclerView的分割线

2020-1-27 1:24:52

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索