Как использовать EventBus в двух действиях на Android

В моем приложении я хочу использовать EventBus для управления событиями.
В моем приложении я открываю деятельность B в деятельности A! и я хочу, чтобы после завершения действия B вызвать одно событие в действии A.

Я пишу ниже коды

Действие Б:

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);
    }
}

Действие А:

@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 . Не показывать мне журнал в этом методе!

как я могу это исправить?


person Jungle    schedule 19.08.2018    source источник


Ответы (1)


Вы пытаетесь выполнить какие-то действия для получения результата действия. Поэтому, когда ваша активность B завершится, выполните setResult и поймайте то же самое в Activity A onActivityResult и выполните свое действие (вызовите нужную функцию). Однако вам нужно выполнить startActivityForResult при открытии B из A.

person abhradeep ghosh    schedule 19.08.2018
comment
Как я могу это? можете ли вы показать мне код с моими кодами? пожалуйста - person Jungle; 19.08.2018
comment
Я пишу ниже код: 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); - person Jungle; 19.08.2018
comment
Да, а затем в своем действии B вы делаете что-то вроде этого. Когда B заканчивается: Intent resultIntent = new Intent(); resultIntent.putExtra (ИМЯ ПАРАМЕТРА, значение параметра); ... setResult(Activity.RESULT_OK, resultIntent); финиш(); В A: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { // Пожалуйста, используйте конечное целое число вместо жестко заданного значения int if (resultCode == RESULT_OK) { // вызовите свою функцию. } - person abhradeep ghosh; 19.08.2018
comment
Я хочу вызвать eventBus, почему бы не вызвать его? как я могу это исправить и назвать это? - person Jungle; 19.08.2018
comment
Здесь вам не нужен EventBus, просто используйте setResult, как я уже упоминал, и ваш код будет работать нормально. - person abhradeep ghosh; 19.08.2018
comment
Я хочу показать диалог в действии A и для этого метода вызова из другого действия, для этого я должен использовать EventBus - person Jungle; 19.08.2018
comment
Как только вы вернете результат в onActivityResult() в Activity A, вы можете делать что угодно, в вашем случае показывая диалог. - person abhradeep ghosh; 19.08.2018
comment
При отображении диалогового окна в методе onActivityResult покажите мне ошибку nullPointer для шоу! как я могу это исправить? - person Jungle; 19.08.2018
comment
Не могли бы вы поделиться своим кодом и показать мне, где именно он бросает нулевой указатель? - person abhradeep ghosh; 19.08.2018
comment
пожалуйста, покажите мой пост с обновлением, покажите мне тост-сообщение, но не показывайте диалог! Почему?! - person Jungle; 19.08.2018
comment
Ты здесь, мой друг? вы не могли бы мне помочь? - person Jungle; 19.08.2018
comment
Вам нужно проверить код результата внутри onActivityResult вместо requestCode. - person abhradeep ghosh; 19.08.2018