Установите минимальную дату в DatePickerDialog

Я хочу установить минимальную дату моего диалога DatePicker с завтрашнего дня. Например, если сегодня 30 апреля 2015 года, он должен начаться с 1 мая 2015 года.

Мой код:

final Calendar myCalendar = Calendar.getInstance();

    final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        }
    };

    startDate.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

        DatePickerDialog dialog = new DatePickerDialog(
                    SomeClassName.this, date, myCalendar
                            .get(Calendar.YEAR), myCalendar
                            .get(Calendar.MONTH), myCalendar
                            .get(Calendar.DAY_OF_MONTH));
        dialog.show();
        dialog.getDatePicker().setMinDate(
                        System.currentTimeMillis() - 10000);
    }});

У меня соответственно две проблемы.

  1. Диапазон дат начинается с текущей даты, то есть 30 апреля 2015 года.

  2. Какую бы дату я ни выбрал, прокручивая дату, устанавливается только 30 апреля 2015 года.

Примечание: диалоговое окно выбора даты появляется при касании события EditText Box.


person souravlahoti    schedule 30.04.2015    source источник


Ответы (2)


public class DatePickerFragment extends DialogFragment implements
            DatePickerDialog.OnDateSetListener {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Use the tommorrow date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            c.add(Calendar.DAY_OF_MONTH, 1);
            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
            DatePickerDialog dp = new DatePickerDialog(getActivity(), this, year, month, day);
            dp.getDatePicker().setMinDate(c.getTimeInMillis());
            return dp;
        }

        public void onDateSet(DatePicker view, int year, int month, int day) {
            // Do something with the date chosen by the user
        }
    }

Отображение выбора даты:

public void showDatePickerDialog() {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

Для получения дополнительной информации посетите: http://developer.android.com/guide/topics/ui/controls/pickers.html#DatePicker.

person Dhaval Patel    schedule 30.04.2015
comment
Мне нужно изменить цвет кнопки ОК и отмены. Как использовать метод setButton () для newfragment. @Dhaval Patel - person souravlahoti; 30.04.2015

Хотя приведенное выше предложение верно, я сделал это по-другому. Выкладываю решение с моей стороны.

final Calendar myCalendar = Calendar.getInstance();
myCalendar.set(Calendar.DAY_OF_MONTH+1);

final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub 
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    } 

}; 

startDate.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) {

    DatePickerDialog dialog = new DatePickerDialog(
                SomeClassName.this, date, myCalendar
                        .get(Calendar.YEAR), myCalendar
                        .get(Calendar.MONTH), myCalendar
                        .get(Calendar.DAY_OF_MONTH));
    dialog.show();
    dialog.getDatePicker().setMinDate(
                    myCalendar.getTimeInMillis());
}}); 


private void updateLabel()
{
   //Do some stuff
}
person souravlahoti    schedule 01.05.2015