2017-04-26 73 views
0

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

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

回答

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

     } 

    }