【问题标题】:DatePickerDialog opening with previous opened screenDatePickerDialog 与先前打开的屏幕一起打开
【发布时间】:2017-09-23 21:12:39
【问题描述】:

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

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

【问题讨论】:

    标签: android android-datepicker


    【解决方案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()));
    
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2012-09-27
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多