【问题标题】:How to use EventBus in two Activity on Android如何在Android上的两个Activity中使用EventBus
【发布时间】:2018-08-19 11:42:39
【问题描述】:

在我的应用程序中,我想使用 EventBus 来管理事件。
在我的应用中,我在 Activity A 上打开 activity B !我想在 Activity B 完成后,在 Activity 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 。在此方法中不显示任何日志!

我该如何解决?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我该怎么办?你能用我的代码给我看代码吗?请
    • 我在下面写代码:Intent intent = new Intent(context, RegisterInAuctionActivity.class); intent.putExtra(ExtraConstants.SHOW_UPDATE_INFO.name(), false); intent.putExtra(ExtraConstants.PAGE_TYPE.name(), Extras.DETAIL.name()); startActivityForResult(intent, 4757);
    • 是的,然后从你的活动 B,你做这样的事情当 B 完成时: Intent resultIntent = new Intent(); resultIntent.putExtra("参数名称", valueOfParameter); ... setResult(Activity.RESULT_OK, resultIntent);结束();在 A 中:@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { // 请使用最终的 int 而不是硬编码的 int 值 if (resultCode == RESULT_OK) { //调用你的函数。 }
    • 我想调用eventBus,为什么不调用呢?我该如何修复它并调用它?
    • 这里不需要 EventBus,只需使用我提到的 setResult,您的代码就可以正常工作。
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多