我想创建这样的功能,用户可以在今天的日期到今天的日期之间的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);
}
});
答案 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);
}
}
});