DatePickerDialog открытие с предыдущим открытым экраном

Здравствуйте, я использую DatePickerDialog и работает как положено.

Ниже мой код.

    Calendar newCalendar = Calendar.getInstance();
    dobDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

            if (view.isShown()) {
                //view.setMaxDate(new Date().getTime());
                Calendar dob = Calendar.getInstance();
                dob.set(year, monthOfYear, dayOfMonth);
                Calendar now = Calendar.getInstance();
                int year1 = now.get(Calendar.YEAR);
                int year2 = dob.get(Calendar.YEAR);
                int age = year1 - year2;

                if (age <= 18) {
                    Toast.makeText(EditProfileActivity.this, MyUtils.getStringFromResource(EditProfileActivity.this, R.string.validate_date_18_above), Toast.LENGTH_SHORT).show();
                    dobFld.setText("");
                } else {
                    isDataChanged = true;
                    dobFld.setText(dateFormatter.format(dob.getTime()));

                }

            }
        }

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    dobDatePickerDialog.getDatePicker().setMaxDate(new Date().getTime());
    dobDatePickerDialog.updateDate(birthYear,birthMonth-1,birthDay);

}

Это показывает мне выбранную дату. Но проблема в том, что если я нажму на опцию года (в верхней части диалогового окна), чтобы изменить год, а затем отменить или нажать кнопку ОК без изменения значения года. Тогда диалог закрывается. Но в следующий раз, если я открою сборщик, он открывается в режиме просмотра года, а не в исходном представлении календаря.

Ниже мой код для начала диалога.

 dobFld = (EditText) findViewById(R.id.dobFld);
    dobFld.setInputType(InputType.TYPE_NULL);
    dobFld.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            dobDatePickerDialog.show();
        }
    });

Пожалуйста, дайте мне понять, как инициализировать сборщик так, чтобы он открывался в виде календаря, как и ожидалось.

1 ответ

Я должен решить проблему. Я пишу, как может быть, это может помочь другим. Просто создайте новый объект при каждом нажатии кнопки.

 dobFld.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Calendar newCalendar = Calendar.getInstance();

            dobDatePickerDialog = new DatePickerDialog(EditProfileActivity.this,EditProfileActivity.this,newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

            dobDatePickerDialog.getDatePicker().setMaxDate(new Date().getTime());
            dobDatePickerDialog.updateDate(birthYear,birthMonth-1,birthDay);
            dobDatePickerDialog.show();
        }
    });

и ниже будет метод dateSet

 @Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    if (view.isShown()) {
        //view.setMaxDate(new Date().getTime());
        Calendar dob = Calendar.getInstance();
        dob.set(year, monthOfYear, dayOfMonth);
        Calendar now = Calendar.getInstance();
        int year1 = now.get(Calendar.YEAR);
        int year2 = dob.get(Calendar.YEAR);
        int age = year1 - year2;

        if (age <= 18) {
            Toast.makeText(EditProfileActivity.this, MyUtils.getStringFromResource(EditProfileActivity.this, R.string.validate_date_18_above), Toast.LENGTH_SHORT).show();
            dobFld.setText("");
        } else {
            isDataChanged = true;
            dobFld.setText(dateFormatter.format(dob.getTime()));

        }

    }
Другие вопросы по тегам