如何在Android的两个Activity中使用EventBus

时间:2018-08-19 11:42:40

标签: java android android-event greenrobot-eventbus-3.0

在我的应用程序中,我想使用 EventBus 来管理事件。
在我的应用中,打开活动A 上的活动B !并且我想要活动B 完成后,在活动A 中调用一个事件。

我在下面写代码

活动B:

private void finishWithAnimate() {
    EventBus.getDefault().post(new EventShowDialog(ExtraConstants.NOTE_DIALOG.name()));
    if (pageType.equals(Extras.DETAIL)) {
        Intent intent = new Intent();
        setResult(4757, intent);
        finish();
    } else {
        finish();
        RegisterInAuctionActivity.this.overridePendingTransition(0, android.R.anim.fade_out);
    }
}

活动A:

@Subscribe(threadMode = ThreadMode.MAIN)
public void getEventShowDialog(EventShowDialog eventShowDialog) {
    Log.e("showDialogEvent", "Root");
    if (eventShowDialog.getDialogName().equals(ExtraConstants.NOTE_DIALOG.name())) {
        Log.e("showDialogEvent", "Call");
        if (!prefsUtils.getFromSharedBool(PrefsKeys.NEW_NOTE_DIALOG.name())) {
            closeDialog.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    noteDialog.dismiss();
                    prefsUtils.setToSharedBool(PrefsKeys.NEW_NOTE_DIALOG.name(), true);
                }
            });
            noteDialog.show();
        }
    }
}

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

更新代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 4757) {
        //Note dialog
        noteDialog = new Dialog(this);
        noteDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        noteDialog.setContentView(R.layout.important_note);
        noteDialog.setCancelable(false);
        closeDialog = noteDialog.findViewById(R.id.okPayFrag_submitOK);
        closeDialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                noteDialog.dismiss();
                prefsUtils.setToSharedBool(PrefsKeys.NEW_NOTE_DIALOG.name(), true);
            }
        });
        if (!prefsUtils.getFromSharedBool(PrefsKeys.NEW_NOTE_DIALOG.name())) {
            Toast.makeText(context, "Show", Toast.LENGTH_SHORT).show();
            noteDialog.show();
            closeDialog.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    noteDialog.dismiss();
                    prefsUtils.setToSharedBool(PrefsKeys.NEW_NOTE_DIALOG.name(), true);
                }
            });
        }
        finish();
        overridePendingTransition(android.R.anim.fade_in, 0);
        startActivity(getIntent());
        overridePendingTransition(android.R.anim.fade_in, 0);
    }
}

但不调用getEventShowDialog中的任何日志。不向我显示此方法的任何登录信息!

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您正在尝试执行一些操作以从活动中获取结果。 因此,当您的活动B完成时,请执行setResult并在活动A上捕获相同的onActivityResult并执行您的操作(调用所需的函数)。 从A打开B时,您需要执行startActivityForResult。