在android应用中,完全摆脱意图系统,只使用事件总线(otto,greenrobot)是可能的吗?例如,是否有可能仅通过事件总线来实现这一点,而根本不打算:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
如果我使用事件总线,它会自动恢复正确的活动并将其带到最前面吗?
最佳答案
到目前为止,我找到的唯一解决方案是一套实用方法,即混合了GreenRobot的意图和EventBus:
public class ActivityUtils {
public static void startForResult(Activity context, Class<?> destinationActivity, Object param) {
Intent intent = new Intent(context, destinationActivity);
EventBus.getDefault().postSticky(param);
context.startActivityForResult(intent, 0);
}
public static void returnSuccessfulResult(Activity context, Object result) {
Intent returnIntent = new Intent();
EventBus.getDefault().postSticky(result);
context.setResult(Activity.RESULT_OK, returnIntent);
context.finish();
}
public static <T> T getParameter(Class<T> type) {
return EventBus.getDefault().removeStickyEvent(type);
}
}
在我的第一个活动中,我称之为:
ActivityUtils.startForResult(this, SecondActivity.class, new MyParam("abc", 123));
在第二个活动中,我打电话给:
MyParam param = ActivityUtils.getParameter(MyParam.class);
当我完成第二个活动时:
ActivityUtils.returnSuccessfulResult(this, new MyResult("xyz"));
然后在第一个事实中:
MyResult result = ActivityUtils.getParameter(MyResult.class);