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()));
}
}