2015-06-25 4 views
4

Я хочу установить ограничение на дату, чтобы пользователь не мог выбрать дату больше, чем тогда, например, если сегодня 1 января, тогда Пользователь не сможет выбрать больше, чем 7 дат, я имею в виду, что он не может выбрать 9 января. Я также хочу, чтобы он не выбирал месяц и год. Поэтому я устанавливаю предел, чтобы установить его задачу за одну неделю.Как установить лимит на дату в диалоговом окне выбора даты

то, что я сделал до сих пор, показывает фрагмент выбора даты и устанавливает в нем текущую дату. код в моей основной деятельности выглядит следующим образом:

etSelectDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       DialogFragment datePickerFragment = new DatePickerFragment() { 
        @Override 
        public void onDateSet(DatePicker view, int year, int month, int day) { 
         Log.d("Date Change", "onDateSet"); 
         Calendar c = Calendar.getInstance(); 
         c.set(year, month, day); 
         DateFormat df = DateFormat.getDateInstance(); 
         etSelectDate.setText(df.format(c.getTime())); 
         //nextField.requestFocus(); //moves the focus to something else after dialog is closed 

        } 
       }; 
       datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker"); 

      } 
     }); 

и дата класс фрагмент сборщика выглядит следующим образом:

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

      // Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     @Override 
     public void onDateSet(DatePicker view, int year, int month, int day) { 
      //blah 
     } 
    } 

до тех пор его работает нормально, но я не знаю, как поставить предел по дате и оставшейся части месяцев и года должен быть не выбран. Я видел много ссылок, таких как this, но я не понимаю. Как я могу это сделать, а также нет ничего полезного на сайте Android.

Так что, пожалуйста, помогите мне, как я могу ставить предел семь дней только

Update

Через ваши ответы я знаю, как установить максимальную дату в календаре, так как я хотите установить максимальную дату на 7 дней раньше текущей даты, я все еще не получаю ее. метод, который я читал до сих пор является:

pickerDialog.getDatePicker().setMaxDate(new Date().getTime()); 

Он устанавливает текущую дату как максимум, но как я могу добавить 7 дней вперед в этом, так как это дата объект? пожалуйста, помогите

+0

вы можете пройти полную нить здесь: http://escrow.aliexpress.com //stackoverflow.com/questions/18272306/set-limit-on-the-datepickerdialog -in-android – strike

+0

Проверьте это https://stackoverflow.com/a/45671497/6478047 – Redman

ответ

13

Вы имеете setMinDate(long) и setMaxDate(long) в вашем распоряжении. Оба они будут работать на уровне API 11 и выше. Поскольку вы используете DatePickerDialog, вам нужно сначала получить базовый DatePicker, вызвав метод getDatePicker().

dpdialog.getDatePicker().setMinDate(minDate); 
dpdialog.getDatePicker().setmaxDate(maxDate); 

Источник: Set Limit on the DatePickerDialog in Android?

можно рассчитать с помощью MinDate,

Date today = new Date(); 
Calendar c = Calendar.getInstance(); 
c.setTime(today); 
c.add(Calendar.MONTH, -6) // Subtract 6 months 
long minDate = c.getTime().getTime() // Twice! 

Обновлено:

Заменить строку ниже

return new DatePickerDialog(getActivity(), this, year, month, day); 

с

// Create a new instance of DatePickerDialog and return it 
    DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); 
    pickerDialog.getDatePicker().setMaxDate(maxDate); 
    pickerDialog.getDatePicker().setMinDate(minDate); 
    return pickerDialog; 
+0

Я видел эту тему раньше, но как я могу реализовать в моем случае –

+0

@stacyqueen Обновлен мой ответ, посмотрите – Kartheek

+0

@stacyqueen работает ли это? – Kartheek

1

с помощью

setMinDate и setMaxDate

MinDate

MaxDate

+0

, пожалуйста, уточните его. где я могу использовать это и в каком формате –

0

попробовать этот

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); 
DatePicker datePicker = dpDialog.getDatePicker(); 

Calendar calendar = Calendar.getInstance();//get the current day 
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds. 
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format 
return dpDialog; 
8

В некоторых случаях, когда вы устанавливаете максимальную дату с датой без часов и минут, вы не сможете выбрать максимальную дату установки. Например

Calendar maxDate = Calendar.getInstance(); 
      maxDate.set(Calendar.DAY_OF_MONTH, day + 5); 
      maxDate.set(Calendar.MONTH, month); 
      maxDate.set(Calendar.YEAR, year); 

datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis()); 

с блоком кода выше, вы не можете нажать на ваш MaxDate.

Но если вы добавите часы и минуты, чтобы понравиться;

  maxDate.set(Calendar.HOUR, 23); 
      maxDate.set(Calendar.MINUTE, 59); 

к вашему MaxDate, ваша последняя дата будет кликабельна