Android 未调用OnDateSetListener()

Android 未调用OnDateSetListener(),android,android-datepicker,Android,Android Datepicker,当我更改日期时,OnDateSetListener()不会被调用。偶数setMinDate(天)行不工作。我想由于某种原因,DatePickerDialog没有注册OnDateSetListener()。但是我想不出来。我已将对话框和侦听器声明为全局 private DatePickerDialog datePicker; private DatePickerDialog.OnDateSetListener dateListener; 代码: // Create dialogs for dat

当我更改日期时,
OnDateSetListener()
不会被调用。偶数
setMinDate(天)行不工作。我想由于某种原因,
DatePickerDialog
没有注册
OnDateSetListener()
。但是我想不出来。我已将对话框和侦听器声明为全局

private DatePickerDialog datePicker;
private DatePickerDialog.OnDateSetListener dateListener;
代码:

// Create dialogs for datePicker
private void createDatePicker() {

    Calendar calendar = Calendar.getInstance(Locale.getDefault());
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int month = calendar.get(Calendar.MONTH);
    int year = calendar.get(Calendar.YEAR);

    datePicker = new DatePickerDialog(this, dateListener, year, month, day);
    datePicker.getDatePicker().setMinDate(day);

    dateListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            Log.d(TAG, "Date changed.");
        }
    };

}

private void setEditTextListeres() {
        myEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    Log.d(TAG, "EditText gained focus.");
                    datePicker.show();
                }
            }
        });
    }

你知道为什么听众没有被呼叫吗?为什么setMinDate()不工作?

在声明侦听器后创建
日期选择器对话框
,如Rapanzel所说

侦听器将无法工作,因为创建
DatePickerDialog
实例时,
dateListener
为空。
DatPickerDialog
对象将检测不到对侦听器所做的更改

编辑


因为dateListener在调用DatePickerDialog()时为null。如果您查看DatePickerDialog的,您将看到私有的最终OnDateSetListener mCallback。这意味着它引用null。该引用是不可变的,因为它是最终的。dateListener=new DatePickerDailog.OnDateSetListener将在内存中的其他位置创建实例(由于new关键字),从而导致引用更改。DatePickerDialog.mCallback中的引用不会更改,因为它是不可变的。

请尝试放置
datePicker=new DatePickerDialog(this,dateListener,year,month,day)dateListener
之后的code>。@rapanzel我也在尝试同样的方法。它只调用侦听器两次。并且setMinDate()仍然不工作。其中,您在
onCreate()
方法中调用了createDatePicker()。@Sam。
setMinDate()
方法现在正在工作。我在方法中传递了错误的值。我已经在调用该方法和侦听器方法时尝试过了。但我想知道为什么
DatePickerDialog
不会看到对侦听器的更改,因为它有一个对它的引用。拥有引用意味着拥有最新的副本。因为dateListener在调用
DatePickerDialog()
时为
null
。如果你看[在
DatePickerDialog
中,您将看到
private final OnDateSetListener McCallback
。这意味着它引用了
null
。该引用变得不可更改,因为它是final。
dateListener=new DatePickerDailog。OnDateSetListener
将在内存中的其他地方创建实例(由于
new
关键字),导致引用发生更改。
DatePickerDialog.mCallback
中的引用不会更改,因为它是不可变的。在调用
DatePickerDialog.mCallback=new DatePickerDailog.OnDateSetListener
后,您能否在调试模式下运行应用程序并查找
DatePickerDialog.mCallback
中包含的内容。我很好奇您会找到什么。