您好我正在使用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);
}
它显示我选择的日期。但问题是,如果我点击年份选项(在对话框顶部)更改年份然后取消或按OK按钮而不更改年份值。然后对话被删除。但是下次如果我打开选择器,它会打开年度视图,而不是在初始日历视图中。
下面是我的代码来启动对话框。
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();
}
});
请告诉我一些如何初始化选择器的线索,以便按预期打开日历视图。
答案 0 :(得分:0)
我已经解决了这个问题。我发帖可能会帮助其他人。 只需在每次点击按钮时创建新对象。
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()));
}
}