Search code examples
javaandroiddialoglistenerdialogfragment

"cannot find symbol method setOnDismissListener(<anonymous OnDismissListener>)"


So, I try to set an OnDismissListener on a dialog thing.

Datepicker dialog = new Datepicker(v);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface Dialog) {
                        mGoogleMap.clear();
                        setMap(mGoogleMap);
                    }

                });

But it says

"Cannot resolve method 'setOnDismissListener(anonymous android.content.DialogInterface.OnDismissListener)'"

The Datepicker class extends DialogFragment, so it should have the setOnDismissListener method?

I've imported android.content.DialogInterface'. Is it confused on thenew DialogInterface.onDismissListener()` for some reason?

Edit: Someone asked for some of the Datepicker code. So here's the constructor and stuff. Let me know if you need anything else.

public class Datepicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    EditText txtDate;
    String strdate;
    public Datepicker(View v){
        txtDate = (EditText)v;
    }
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        SimpleDateFormat simpleformat = new SimpleDateFormat("MM/dd/yyyy");
        strdate = simpleformat.format(c.getTime());
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }
}

Solution

  • You have to resolve this issue with a help of interface

    public class Main3Activity extends AppCompatActivity implements DatePickerListener{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    .........
    
         //Initialise or create your dialog like this
          DatePicker dialog = new DatePicker(v,this);
    }
    
    @Override
        public void onDatePickerDismissed() {
             //Here You receive the dialog dissmiss listner
                            mGoogleMap.clear();
                            setMap(mGoogleMap);
        }
    }
    

    Create a interface class like

    public interface DatePickerListener {
    
        public void onDatePickerDismissed();
    }
    

    Change you dialog picker like this

    @SuppressLint("ValidFragment")
    public class DatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {
        EditText txtDate;
        String strdate;
        DatePickerListener datePickerListener;
        @SuppressLint("ValidFragment")
        public DatePicker(View v, DatePickerListener _datePickerListener){
            txtDate = (EditText)v;
            this.datePickerListener = _datePickerListener;
        }
    
        public DatePicker() {
    
        }
    
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
            SimpleDateFormat simpleformat = new SimpleDateFormat("MM/dd/yyyy");
            strdate = simpleformat.format(c.getTime());
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        @Override
        public void onDateSet(android.widget.DatePicker datePicker, int i, int i1, int i2) {
    
        }
    
        @Override
        public void onDismiss(DialogInterface dialog) {
            datePickerListener.onDatePickerDismissed();
            super.onDismiss(dialog);
        }
    }
    

    Hope it will help you :)