我遇到的问题是:fragment借助它所依赖的A Activity 开启B Activity,B Activity 返回的数据要传给fragment
startActivityForResult的方式只适合两个Activity之间传递数据,我要做的就是将B Activity传回来的数据
由A Activity的onActiityResult方法接收,并通过EventBus将接收的数据传递给fragment
Android Studio首先添加依赖
compile 'org.greenrobot:eventbus:3.0.0'
在需要接收数据的fragment里注册EventBus
我是在
onCreateView方法里注册的
在ondestroy方法里销毁的
注册:
@Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { EventBus.getDefault().register(this);}
销毁:
@Override public void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }新写
onEventMainThread方法用于接收自定义类WorkerIdEvent的对象,注意必须加上@Subscribe
@Subscribe public void onEventMainThread(WorkerIdEvent event) { String msg = event.getMsg(); LogUtils.e("回到fragment中mag===="+msg); //被EventBus由其他Activity传进来的数据就是这个msg }我的
WorkerIdEvent类是如此定义的(不用继承啥,onEventMainThread方法参数只要是个object就行),因为我只需要接收一个String类型的数据所以并不复杂public class WorkerIdEvent { private String mMsg; public WorkerIdEvent(String msg) { mMsg = msg; } public String getMsg(){ return mMsg; } }好了接收数据的fragment中的设置搞定了,接着去Activity里抛数据去,@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1010 && resultCode == 1001 && null != data) { //獲取了worktype String workerTypeId; workerTypeId = data.getStringExtra("ID"); EventBus.getDefault().post(new WorkerIdEvent(workerTypeId)); } }我想要的数据就是这个workerTypeId,抛出去就是了