当我更改日期时,OnDateSetListener()不会被调用。即使setMinDate(day);线路也不工作。我想出于某种原因DatePickerDialog没有注册OnDateSetListener()。但没搞清楚。我已经声明dialog和listener都是全局的。

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()不起作用?

最佳答案

在声明侦听器之后创建DatePickerDialog,就像rapanzel所说的。
侦听器将无法工作,因为在创建dateListener实例时DatePickerDialog为空。DatPickerDialog对象不会检测对侦听器所做的更改。
编辑:
因为在调用DatePickerDialog()时DateListener为空。如果查看DatePickerDialog的source,您将看到私有final onDateSetListener mcallback。这意味着它引用了null。该引用变为不可变的,因为它是最终的。datelistener=new datepickerdailog.ondatesetlistener将在内存中的其他位置创建实例(因为new关键字),从而导致引用更改。datepickerdialog.mcallback中的引用不会更改,因为它是不可变的。

关于android - OnDateSetListener()没有被调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17360215/

10-08 21:21