2

Android アプリケーションで Intent システムを完全に取り除き、イベント バス (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();

イベント バスを使用すると、インテントで行われるように、自動的に正しいアクティビティが再開され、前面に表示されますか?

4

1 に答える 1

3

これまでに見つけた唯一の解決策は、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);
于 2014-07-29T05:11:04.433 に答える