これまでに見つけた唯一の解決策は、greenrobot の Intent と 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);
}
}
私の FirstActivity では、次のようなものを呼び出します。
ActivityUtils.startForResult(this, SecondActivity.class, new MyParam("abc", 123));
その後、SecondActivity で次のように呼び出します。
MyParam param = ActivityUtils.getParameter(MyParam.class);
SecondActivity を終了すると:
ActivityUtils.returnSuccessfulResult(this, new MyResult("xyz"));
そして、FirstActivity で:
MyResult result = ActivityUtils.getParameter(MyResult.class);