如何在Android中将日历的限制设置为某个日期,以及如何在单击按钮时将日期增加和减少到相同的限制

时间:2018-12-17 09:41:51

标签: java android date

我想创建这样的功能,用户可以在今天的日期到今天的日期之间的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 :(得分:1)

您的代码有几个问题。首先,让我们考虑一下日期选择器。在您的代码中,您使用了一些变量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);
        }
    }
});