Как скрыть прошлые даты и разрешить пользователю выбирать только будущие даты

Как скрыть прошлые даты в диалоговом окне DatePicker? Я не хочу позволять пользователю выбирать прошлые даты

Что было бы лучшим способом? если я хочу запретить пользователю выбирать только будущие даты!

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        .................................................
        editDate.setOnClickListener(new View.OnClickListener() {

            @SuppressWarnings("deprecation")
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(DIALOG_DATE);
            }
        });   

    }

     @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_DATE:
                return new DatePickerDialog(this, new OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year,
                            int monthOfYear, int dayOfMonth) {
                        dateTime.set(year, monthOfYear, dayOfMonth);
                        editDate.setText(dateFormatter
                                .format(dateTime.getTime()));
                    }
                }, dateTime.get(Calendar.YEAR),
                   dateTime.get(Calendar.MONTH),
                   dateTime.get(Calendar.DAY_OF_MONTH));
            }
            return null;
     }

}

person Sun    schedule 17.09.2014    source источник
comment
Почему щедрость? Вам не понравился метод setMinDate?   -  person Laurentiu L.    schedule 19.08.2015
comment
взгляните на метод seMinDate.   -  person SweetWisher ツ    schedule 20.08.2015
comment
setMinDate() должно быть достаточно. Вы можете использовать setMinDate(new Date()), и минимальная дата будет сегодня.   -  person Hanny Udayana    schedule 25.08.2015


Ответы (5)


Вы должны использовать setMinDate для минимальной даты, и вы также можете использовать setMaxDate, если вы хотите установить максимальную дату.

Вот пример кода для SetMinDate для DatePickerDialog.

@Override
protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DATE:

            DatePickerDialog mDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    dateTime.set(year, monthOfYear, dayOfMonth);
                    editDate.setText(dateFormatter.format(dateTime.getTime()));
                }
            }, dateTime.get(Calendar.YEAR), dateTime.get(Calendar.MONTH), dateTime.get(Calendar.DAY_OF_MONTH));
            Calendar mCalendarMinimum = Calendar.getInstance();
            mCalendarMinimum.add(Calendar.HOUR, -1);
            mDatePickerDialog.getDatePicker().setMinDate(mCalendarMinimum.getTimeInMillis());
            return mDatePickerDialog;
        }
        return null;
    }
person Niranj Patel    schedule 20.08.2015

Для достижения ваша цель. Док говорит:

Sets the minimal date supported by this NumberPicker in milliseconds since January 1, 1970 00:00:00 in getDefault() time zone.
person Alex Chengalan    schedule 17.09.2014

Вы можете попробовать этот код в вашем случае переключателя

DatePickerDialog dpd = new DatePickerDialog(AddTaskActivity.this,
                    myDateListener, year, month, day);
            dpd.getDatePicker().setCalendarViewShown(false);
            dpd.show();

Где myDateListener следует коду

частный DatePickerDialog.OnDateSetListener myDateListener = новый DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {

        showDate(arg1, arg2 + 1, arg3);
    }
};

и showDate() - это метод отображения даты в textView Вот код для showDate()

 public void showDate(int year, int month, int day) {

    String day1 = String.valueOf(day);
    String month1 = String.valueOf(month);



   String  s2 = day1 + "/" + month1 + "/" + year;

    Log.e("date", s2);
    Cal.setText(s2);
}

Надеюсь, это поможет вам :)

person Chandrika Ajmera    schedule 24.08.2015

Вы можете решить это с помощью одной строки кода:

datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());

Таким образом, средство выбора даты будет отображать даты только с текущего времени и вперед.

Справочник.

person George    schedule 26.08.2015

this.calendar = new GregorianCalendar();
this.datePicker = (DatePicker) findViewById(R.id.xxxxx);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // (picker is a DatePicker)
    this.datePicker.setMinDate(this.calendar.getTimeInMillis());
} else {
    final int minYear = this.calendar.get(Calendar.YEAR);
    final int minMonth = this.calendar.get(Calendar.MONTH);
    final int minDay = this.calendar.get(Calendar.DAY_OF_MONTH);

    this.datePicker.init(minYear, minMonth, minDay,
            new OnDateChangedListener() {

                public void onDateChanged(DatePicker view, int year,
                        int month, int day) {
                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, month, day);

                    if (calendar.after(newDate)) {
                        view.init(minYear, minMonth, minDay, this);
                    }
                }
            });
    Log.w(TAG, "API Level < 11 so not restricting date range...");
}

Надеюсь, это поможет вам :)

person Joy Helina    schedule 26.08.2015