2014-05-20 5 views
34

Comment désactiver les anciennes dates dans le sélecteur de date Android?Comment désactiver les anciennes dates dans le sélecteur de date Android?

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     // set date picker as current date 
     return new DatePickerDialog(this, datePickerListener, year, month, 
       day); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     year = selectedYear; 
     month = selectedMonth+1; 
     day = selectedDay; 

     startdate.setText(new StringBuilder().append(day).append("-") 
       .append(getMonth(month + 1)).append("-").append(year) 
       .append(" ")); 
    } 
}; 
+0

DatePickerDialog datePickerDialog = new DatePickerDialog (getActivity(), la date, myCalendar.get (Calendar.YEAR), myCalendar.get (Calendar.MONTH), myCalendar.get (Calendar.DAY_OF_MONTH)); datePickerDialog.getDatePicker(). SetMinDate (System.currentTimeMillis() - 1000); datePickerDialog.show(); – Dilip

Répondre

121

Vous pouvez faire

datePicker.setMinDate(System.currentTimeMillis() - 1000); 

qui fixe la date d'aujourd'hui comme date minimale et toutes les dates passées sont désactivées.

datePicker est un objet de DatePicker si vous utilisez un objet de DatePickerDialog vous pouvez faire

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

Note: setMinDate a été introduite dans l'API 11

+0

Merci pour la réponse .. Où devrais-je mettre cette ligne? – Addy

+0

Où vous créez votre objet 'DatePicker' ou' DatePickerDialog' – Apoorv

+1

Merci pour la réponse. Mais quand j'ai utilisé la solution ci-dessus, il m'a donné un accident dans mon application. J'ai donc changé le "System.currentTimeMillis() - 1000" en "System.currentTimeMillis() - 10000" et mon application a fonctionné parfaitement. Pouvez-vous s'il vous plaît lemme savoir pourquoi je reçois accident en soustrayant 1000 mais pas sur 10000 – user3705697

6

Voilà comment je le fais:

public class DatePickerFragment extends DialogFragment { 
OnDateSetListener ondateSet; 
Calendar c; 
int year = 0, month = 0, day = 0; 

public DatePickerFragment() { 
} 

public void setCallBack(OnDateSetListener ondate) { 
    ondateSet = ondate; 
} 

public static DatePickerFragment newInstance(Bundle bundle) { 
    DatePickerFragment myFragment = new DatePickerFragment(); 
    myFragment.setArguments(bundle); 
    return myFragment; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // final Calendar c = Calendar.getInstance(); 
//if else for null arguments 
    if (getArguments() != null) { 
     year = getArguments().getInt("year"); 
     month = getArguments().getInt("month"); 
     day = getArguments().getInt("day"); 
     c = Calendar.getInstance(); 
     c.set(year, month, day); 

    } else { 
     c = Calendar.getInstance(); 
     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 
     Log.d("else", "else"); 
    } 


    DatePickerDialog picker = new DatePickerDialog(getActivity(), 
      ondateSet, year, month, day); 
    picker.getDatePicker().setMinDate(c.getTime().getTime()); 
    Log.d("picker timestamp", c.getTime().getTime() + ""); 
    return picker; 
} 
} 

Voici comment instancier le sélecteur:

Bundle bundle = new Bundle(); 
     Calendar c = Calendar.getInstance(); 
     bundle.putInt("year", c.get(Calendar.YEAR)); 
     bundle.putInt("month", c.get(Calendar.MONTH)); 
     bundle.putInt("day", c.get(Calendar.DAY_OF_MONTH)); 
     DatePickerFragment fragment = DatePickerFragment 
       .newInstance(bundle); 
     fragment.setCallBack(dateSet); 
     fragment.show(getActivity().getSupportFragmentManager(), null); 

Ceci est ma mise en œuvre, n'hésitez pas à le modifier. Notez que ce code définit mindate comme date currnet par défaut. La nouvelleInstance est également importante.

+1

Celui que j'ai cherché .. Merci –

11

Cette méthode fonctionnera correctement.

//Get yesterday's date 
Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -1); 

//Set yesterday time milliseconds as date pickers minimum date 
DatePickerDialog datePickerDialog = new DatePickerDialog(context, myDateListener, year, month, day); 
datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis()); 
datePickerDialog.show(); 
1

Vous pouvez utiliser cette ligne dans votre code ...

private Calendar cal; 
private int day; 
private int month; 
private int year; 

static final int DATE_PICKER_ID = 1111; 
TextView textView; 

    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      cal = Calendar.getInstance(); 
      day = cal.get(Calendar.DAY_OF_MONTH); 
      month = cal.get(Calendar.MONTH); 
      year = cal.get(Calendar.YEAR); 
      showDialog(DATE_PICKER_ID); 

     } 
    }); 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DATE_PICKER_ID: 
      // create a new DatePickerDialog with values you want to show 

      DatePickerDialog datePickerDialog = new DatePickerDialog(this, datePickerListener, year, month, day); 
      Calendar calendar = Calendar.getInstance(); 

      calendar.add(Calendar.DATE, 0); // Add 0 days to Calendar 
      Date newDate = calendar.getTime(); 
      datePickerDialog.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000))); 
      return datePickerDialog; 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
    // the callback received when the user "sets" the Date in the 
    // DatePickerDialog 
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 

     textViewTime.setText(selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear); 
    } 
}; 
+0

Et quoi pour 'calendar.add (Calendrier .DATE, 0); 'et un' Calendar calendar' s'il n'est pas utilisé? Date newDate = new Date(); est suffisant. – CoolMind

0

Ok donc je me sers MaterialDatePicker Bibliothèque et son trop simple pour régler la date minimum sur elle.

DatePickerDialog mDatePickerDialog = DatePickerDialog.newInstance(listener, 
       mTime.year, mTime.month, mTime.monthDay); 
mDatePickerDialog.setYearRange(2016, 2036); 
Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(System.currentTimeMillis() - 1000); 
mDatePickerDialog.setMinDate(c); 
Questions connexes