как установить лимит календаря на какую-то дату и увеличить или уменьшить дату по нажатию кнопки, чтобы тот же лимит в Android - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу создать такую ​​функциональность, чтобы пользователь мог выбирать дату от сегодняшней даты до 30 дней после сегодняшней, поэтому я установил максимальную дату и минимальную дату.и, кроме того, мне нужна функциональность, в которой у меня есть две кнопки, одна для увеличения даты, а другая для уменьшения даты, и из этих двух кнопок пользователь также может выбирать дату между сегодняшней датой и 30 днями после сегодняшней даты, но проблема заключается в том, что кто-то нажимает на набор кнопок.Максимальная дата и минимальная дата не работают, и в диалоговом окне выбора даты в первый раз он работает нормально, но в следующий раз, когда кто-то нажимает на календарь, он показывает 30 дней с этой даты, но я не хочу, чтобы я хотел показать сегодняшнюю дату и 30дней после этой даты.

для установки максимальной и минимальной даты

 try {
            pickerDialog = com.wdullaer.materialdatetimepicker.date.DatePickerDialog.newInstance(MainActivity.this,
                    calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH),
                    calendar.get(Calendar.DAY_OF_MONTH));

            pickerDialog.setMinDate(Calendar.getInstance());
            calendar.add(Calendar.DAY_OF_MONTH, 30);

            pickerDialog.setMaxDate(calendar);

            pickerDialog.show(getFragmentManager(), "Date Picker Dialog");
        } catch (Exception e) {
            e.printStackTrace();
        }

для увеличения и уменьшения даты

 ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                calendarSh.add(Calendar.DAY_OF_MONTH, -1);
                formattedDate = simpleDateFormat.format(calendarSh.getTime());

                Log.v("PREVIOUS DATE : ", formattedDate);
                tvDate.setText(formattedDate);
            }
        });

        ivNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                calendarSh.add(Calendar.DAY_OF_MONTH, +1);
                formattedDate = simpleDateFormat.format(calendarSh.getTime());

                Log.v("NEXT DATE : ", formattedDate);
                tvDate.setText(formattedDate);
                ivBack.setEnabled(true);
            }
        });

1 Ответ

0 голосов
/ 17 декабря 2018

Есть несколько проблем с вашим кодом.Во-первых, давайте рассмотрим выбор даты.В вашем коде вы используете некоторую переменную calendar, которая инициализируется извне вашему коду инициализации выбора даты.При настройке выбора даты вы добавляете к нему 30 дней - но затем вы снова используете эту переменную в следующий раз - так что добавляете к ней еще 30 дней - и так далее.Вместо этого вы должны инициализировать его внутри.Код будет выглядеть примерно так:

try {
    Calendar newCalendar = Calendar.getInstance();
    pickerDialog = com.wdullaer.materialdatetimepicker.date.DatePickerDialog.newInstance(
            MainActivity.this,
            newCalendar .get(Calendar.YEAR),
            newCalendar .get(Calendar.MONTH),
            newCalendar .get(Calendar.DAY_OF_MONTH)
    );

    pickerDialog.setMinDate(newCalendar);
    newCalendar.add(Calendar.DAY_OF_MONTH, 30);
    pickerDialog.setMaxDate(newCalendar);
    pickerDialog.show(getFragmentManager(), "Date Picker Dialog");
} catch (Exception e) {
    e.printStackTrace();
}

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

final Calendar minDate = Calendar.getInstance();
final Calendar.maxDate = Calendar.getInstance();
maxDate.add(Calendar.DAY_OF_MONTH, 30);

ivBack.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (calendarSh.after(minDate)) {
            calendarSh.add(Calendar.DAY_OF_MONTH, -1);
            formattedDate = simpleDateFormat.format(calendarSh.getTime());

            Log.v("PREVIOUS DATE : ", formattedDate);
            tvDate.setText(formattedDate);
        }
    }
});

ivNext.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (calendarSh.before(maxDate)) {
            calendarSh.add(Calendar.DAY_OF_MONTH, +1);
            formattedDate = simpleDateFormat.format(calendarSh.getTime());

            Log.v("NEXT DATE : ", formattedDate);
            tvDate.setText(formattedDate);
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...