0

In my application i want use EventBus for manage events.
In my app i open activity B on the Activity A ! and i want when activity B finished, call one event in Activity A.

I write below codes

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

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

Update codes:

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

But not call any log in getEventShowDialog . Not show me any log in this method!

how can i fix it?

Jungle
  • 247
  • 5
  • 16

1 Answers1

0

You are trying to perform some actions on getting a result from an activity. So when your activity B finishes, do a setResult and catch the same on Activity A onActivityResult and perform your action(call the function you want). You need to do a startActivityForResult while opening B from A though.

  • How can i it? can you show me code with my codes? please – Jungle Aug 19 '18 at 11:56
  • I write below code : `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);` – Jungle Aug 19 '18 at 12:00
  • Yes, and then from your Activity B, you do something like this When B finishes: Intent resultIntent = new Intent(); resultIntent.putExtra("NAME OF THE PARAMETER", valueOfParameter); ... setResult(Activity.RESULT_OK, resultIntent); finish(); In A: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { // Please, use a final int instead of hardcoded int value if (resultCode == RESULT_OK) { // call your function. } – abhradeep ghosh Aug 19 '18 at 12:07
  • I want call eventBus, why not call it? how can i fix it and call this? – Jungle Aug 19 '18 at 12:09
  • You dont need a EventBus here, just use setResult as I mentioned and your code would work fine. – abhradeep ghosh Aug 19 '18 at 12:12
  • I want show Dialog in Activity A and for this call method from another activities, for this way i should use EventBus – Jungle Aug 19 '18 at 12:13
  • Once you get the result back in onActivityResult() in Activity A, you can do anything , in your case showing a dialog. – abhradeep ghosh Aug 19 '18 at 12:22
  • When show dialog in onActivityResult method show me nullPointer error for show! how can i fix it? – Jungle Aug 19 '18 at 12:24
  • Could you share your code and show me where exactly its throwing null pointer ? – abhradeep ghosh Aug 19 '18 at 12:40
  • please show my update post, show me Toast message but not show dialog! why?! – Jungle Aug 19 '18 at 12:45
  • Are you here my friend? can you help me? – Jungle Aug 19 '18 at 12:56
  • You need to check result code inside onActivityResult in place of requestCode. – abhradeep ghosh Aug 19 '18 at 13:23