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
中包含的内容。我很好奇您会找到什么。