Cannot get DialogFragment to dismiss programmatically

前端 未结 3 1305
感动是毒
感动是毒 2021-01-14 02:34

I have a DialogFragment that shows a list of items to pick from (similar to the attach dialog in Messaging).

My problem is that I cannot get this dialog to dismiss w

相关标签:
3条回答
  • 2021-01-14 03:02

    Why not use the methods available on AlertDialog.Builder to build the list, instead of creating your own ListView and populating it?

    I have modified your sample code to show how this would work, and in this example the dialog dismiss() functions fine.

    public Dialog onCreateDialog(android.os.Bundle savedInstanceState) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setSingleChoiceItems(mShareAdapter, 0, new OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    if (listener != null) {
                        listener.newShare((ShareType) mShareAdapter.getItem(which));
                    }
                }
            });
            builder.setTitle("Share which?");
            return builder.create();
        }
    
    0 讨论(0)
  • 2021-01-14 03:04

    For some - unknown to me - reason, the dialog reference you get back from getDialog() isn't the one you want to work with when inside the listener. You need a reference to the dialog as provided you when you call builder.create();

    For example:

        final AlertDialog dialog = builder.create();
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                dialog.dismiss();
            }
        });
        return dialog;
    
    0 讨论(0)
  • 2021-01-14 03:11

    HA....

    I've found it...

    The reason for this is actually ours... we were trying to inflate an xml, and have called:

    DialogFragment.this.getLayoutInflater(null).inflate(...);
    

    This call causes, like I've stated in the comment to create 4 dialogs, and then everything gets messed up.

    The proper way to do this would be to call:

    LayoutInflater layoutInflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    layoutInflater.inflate(...);
    

    This fix solved the annoying bug for me on the first go!

    0 讨论(0)
提交回复
热议问题