当我更改日期时,OnDateSetListener()
没有被调用。甚至setMinDate(day);
线路不工作。我认为由于某种原因DatePickerDialog
尚未注册OnDateSetListener()
。但无法弄清楚。我已将对话框和侦听器声明为全局的。
private DatePickerDialog datePicker;
private DatePickerDialog.OnDateSetListener dateListener;
Code :
// 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() 不起作用?
创建DatePickerDialog
在你宣布听众之后,就像 Rapunzel 说的那样。
监听器将不起作用,因为dateListener
创建时为空DatePickerDialog
实例。这DatPickerDialog
对象不会检测对侦听器所做的更改。
EDIT:
因为调用 DatePickerDialog() 时 dateListener 为 null。如果你看一下source http://goo.gl/P04hz在 DatePickerDialog 中,您将看到私有的最终 OnDateSetListener mCallback。这意味着它引用了 null。该引用变得不可变,因为它是最终的。 dateListener = new DatePickerDailog.OnDateSetListener 将在内存中的其他位置创建实例(由于 new 关键字),从而导致引用发生更改。 DatePickerDialog.mCallback 中的引用不会更改,因为它是不可变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)