使用先前打开的屏幕打开DatePickerDialog

时间:2017-04-26 12:46:56

标签: android android-datepicker

您好我正在使用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();
        }
    });

请告诉我一些如何初始化选择器的线索,以便按预期打开日历视图。

1 个答案:

答案 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()));

        }

    }