2013-04-16 5 views
1

Я создал действие, в котором есть поле для вставки даты рождения пользователя. Для этого я использовал средство выбора даты.Настройка верхнего и нижнего пределов даты на диалог выбора даты

Это исходный код, что я делаю:

// onclick dob edittext open date picker dialog 
     dob.setFocusableInTouchMode(false); 
     dob.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       //open date picker 
        showDialog(DATE_DIALOG_ID); 

      } 
     }); 


//======================For picking birth day========================== 
    // Creating dialog 
     @Override 
     protected Dialog onCreateDialog(int id) { 
      Calendar c = Calendar.getInstance(); 
      int cyear = c.get(Calendar.YEAR); 
      int cmonth = c.get(Calendar.MONTH); 
      int cday = c.get(Calendar.DAY_OF_MONTH); 


      switch (id) { 
       case DATE_DIALOG_ID: 
        return new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday); 
      } 
      return null; 
     } 
     private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 
      // onDateSet method 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
//    String date_selected = String.valueOf(monthOfYear+1)+" /" 
//         +String.valueOf(dayOfMonth)+" /" 
//         +String.valueOf(year); 

       String date_selected = String.valueOf(dayOfMonth)+" /" 
         +String.valueOf(monthOfYear+1)+" /" 
         +String.valueOf(year); 
       //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show(); 
       dob.setText(date_selected); 
      } 
     }; 
//======================For picking birth day========================== 

Теперь то, что я хочу сделать это, чтобы ограничить выбор даты для конкретного года. Как это:

int maxYear = c.get(Calendar.YEAR) - 15; // this year (2013) - 15 = 1998 
       int maxMonth = c.get(Calendar.MONTH); 
       int maxDay = c.get(Calendar.DAY_OF_MONTH); 

       int minYear = maxYear-49; 
       int minMonth = 0; // january 
       int minDay = 25; 

Что я должен сделать, чтобы установить вышеуказанное ограничивающее на выбор даты?

// ---------------- Редактировать ------------------------- -

я сделал что-то вроде этого:

//======================For picking birth day========================== 
    // Creating dialog 
     @Override 
     protected Dialog onCreateDialog(int id) { 
      Calendar c = Calendar.getInstance(); 
      maxYear = c.get(Calendar.YEAR) - 15; // this year (2013) - 15 = 1998 
      maxMonth = c.get(Calendar.MONTH); 
      maxDay = c.get(Calendar.DAY_OF_MONTH); 




      switch (id) { 
       case DATE_DIALOG_ID: 
        return new DatePickerDialog(this, mDateSetListener, maxYear, maxMonth, maxDay); 
      } 
      return null; 
     } 


     DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 



       int minYear = maxYear-49; 
       int minMonth = 0; // january 
       int minDay = 25; 

      public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) { 

       Date current = new Date(year, monthOfYear, dayOfMonth); 

       Date minDate = new Date(minYear, minMonth, minDay); 
       Date maxDate = new Date(maxYear, maxMonth, maxDay); 
       if(current.getTime() < minDate.getTime()) 
       { 
        //set to minimum date 
       }else if(current.getTime() > maxDate.getTime()) 
       { 
        //Set to max Date 
       } 

      } 

      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
       // TODO Auto-generated method stub 
       String date_selected = String.valueOf(dayOfMonth)+" /" 
          +String.valueOf(monthOfYear+1)+" /" 
          +String.valueOf(year); 
        //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show(); 
        dob.setText(date_selected); 

      } 
     }; 
//======================For picking birth day========================== 

Это фиксирующее верхний предел, но нижний предел или MinDate не получает фиксированное! Что надо сделать?

ответ

2

Набор OnDateChangedListener() Для вас DatePicker и внутри onDateChanged функции, если набор дат больше, чем решить предел, если так DatePicker.updateDate(minYear, minMonth, minDay); использовать этот метод, чтобы сбросить его.

Date minDate = new Date(1990, 10, 25); 
Date maxDate = new Date(2013, 4, 15); 



OnDateChangedListener listener = new OnDateChangedListener() { 

    @Override 
    public void onDateChanged(DatePicker view, int year, int monthOfYear, 
      int dayOfMonth) { 

     Date current = new Date(year, monthOfYear, dayOfMonth); 

     if(current.getTime() < minDate.getTime()) 
     { 
      //set to minimum date 
     }else if(current.getTime() > maxDate.getTime()) 
     { 
      //Set to max Date 
     } 

    } 
}; 
YourDatePicker.init(2013, 4, 15, listener); 
+0

МОЖЕТ ЛИ ВЫ ПОЖАЛУЙСТА, ОБЪЯСНИТЕ ДЕНЬ БОЛЬШЕ ЭЛАБОРАТИВНЫМ? – kittu88

+0

Как насчет максимального предела? – kittu88

+0

См. Отредактированный ответ. – Triode

Смежные вопросы