2011-08-23 5 views

Répondre

3
  1. Depuis niveau de l'API 11 il existe une méthode pour cela:

    DatePicker.setMaxDate(long maxDate) 
    
  2. Si elle doit travailler dans les versions précédentes, utilisez cette méthode:

    public void init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener) 
    

Vous pourrait passer votre propre OnDateChangedListener qui "réinitialise" les dates non valides au plus récent:

DatePicker picker = ... 
int year = ... 
int monthOfYear = ... 
int dayOfMonth = ... 
picker.init(year, monthOfYear, dayOfMonth, new DatePicker.OnDateChangedListener() { 

    @Override 
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     // check if current date is OK 
     boolean dateOk = ... 
     if (!dateOk) { 
      // correct the date, but be sure the corrected date is OK 
      // => otherwise you might get endless recursion 
      year = ... 
      monthOfYear = ... 
      dayOfMonth = ... 
      // update the date widget with the corrected date values 
      view.updateDate(year, monthOfYear, dayOfMonth); 
     } 
    } 
}); 
+0

J'ai un problème similaire: Je veux afficher un dialogue lorsque la date est passée. Le problème est que le dialogue est appelé deux fois: d'abord, lorsque l'utilisateur entre une date antérieure et deuxièmement, lorsque view.updateDate est invoqué. Je suppose que cela déclenche l'appel à l'auditeur une fois de plus puisque nous "changeons" la date avec cet appel. Comment pouvons-nous nous débarrasser de cela? pouvons-nous temporairement «effacer» les auditeurs? – kaffein

Questions connexes