8
votes

Limitation de date Android DatePicker

J'utilise DatePicker dans mon activité,

Je veux limiter la date cueillie par l'utilisateur à la date d'aujourd'hui.

Ils ne doivent pas ne pas pouvoir sélectionner la date supérieure à la date d'aujourd'hui.

merci.


0 commentaires

4 Réponses :


3
votes

Je n'ai pas travaillé avec DatePicker, mais la documentation ne montre aucune méthode qui peut limiter la date maximale des affichages du sélecteur, vous pouvez toujours toujours vérifier la date à laquelle il renvoie et peut notifier à l'utilisateur le critère de validation.


0 commentaires

0
votes

Je suis d'accord avec Sheikh.

Peut-être envisagez de faire la validation à la date entrée et, si invalide, informez-en l'utilisateur et lancez à nouveau le DatePicker.

Autre que cela, peut-être un widget personnalisé, mais je n'ai pas vu de manière par défaut de le faire.


0 commentaires

8
votes

Oui, vous pouvez le faire très facilement la validation ici est l'exemple:

if(dateObj1.before(dateObj2) || dateObj1.equals(dateObj2)){
//the program runs normally
}
else{
                new AlertDialog.Builder(PM_Edit.this)

                .setTitle("Wrong Data Input!")

                .setMessage("The end Date must be Before the start Date, please insert new Date values")

                .setNeutralButton("Ok",

                new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog,

                int which) {

                }

                }).show();
            }


0 commentaires

5
votes
DatePicker datePicker = (DatePicker)findViewById(R.id.new_date_picker);


datePicker.init(year, month, day, new OnDateChangedListener() {

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

        if(isDateAfter(view)){
            Calendar mCalendar = Calendar.getInstance();
            view.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
        }
    }


    private boolean isDateAfter(DatePicker tempView) {
        Calendar mCalendar = Calendar.getInstance();
        Calendar tempCalendar = Calendar.getInstance();
        tempCalendar.set(tempView.getYear(), tempView.getMonth(), tempView.getDayOfMonth(), 0, 0, 0);
        if(tempCalendar.after(mCalendar))
            return true;
        else 
            return false;
    }
});

0 commentaires