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 Fragment与Activity之间的数据交互)