1

I have a custom dialog which extends AppCompatDialogFragment. I am calling it from within one Fragment of a BottomNavigationBar. It gets dismissed when a message is returned from a ListenerService. It all works well until I switch to a different fragment using one of the icons on the BottomNavigationBar and then back to the fragment with Dialog functionality. The next time I show the dialog the message does not dismiss it.

I have a member variable:

SendingMessageDialog sendingMessageDialog;

When I click a button it calls this to show the dialog:

sendingMessageDialog = new SendingMessageDialog();
sendingMessageDialog.show(getActivity().getSupportFragmentManager(), "Sending Message");

When the message is receive I call this:

sendingMessageDialog.dismiss();
sendingMessageDialog = null;

I have also tried it this way: private void dismissDialog() {

    Fragment prev = getActivity().getSupportFragmentManager().findFragmentByTag("Sending Message");
    if (prev != null) {
        Log.d(TAG, "dismissDialog: prev is not null");
        SendingMessageDialog df = (SendingMessageDialog) prev;
        df.dismiss();
    }
}

My SendingMessageDialog which extends AppCompatDialogFragment, I have this code in my onCreateDialog:

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

    Log.d(TAG, "onCreateDialog: starting");

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();

    View view = inflater.inflate(R.layout.send_message_dialog, null);

    builder.setView(view)
            .setTitle("Sending Token")
            .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });

    return builder.create();
}

I have looked up a few post on stackoverflow but none seem to address this specific issue. I saw this one, but there is no cancel() method available. I saw this one but I have to dismiss the dialog when I get a message from another part of the system, so I cannot just do this in-line sort of thing. This one just seemed like a simple mistake of calling show on the wrong dialog. I couldn't quite get a handle on this one, but it's 8 years old and seems to be about the coordination of two dialogs.

Many of the examples identify the dismiss is not working. In my case it is, until I switch fragments using the bottom navigation and then return to the fragment where the dialog process exists.

Nothing special happening in the navigation:

selectedFragment = new RunScenarioListFragment();

and:

getActivity().getSupportFragmentManager()
     .beginTransaction()
     .replace(R.id.frame_layout_run_scenario,selectedFragment)
     .addToBackStack(null)
     .commit();
lcj
  • 1,355
  • 16
  • 37

0 Answers0