问题描述
我有一个重要的daterangepicker选择单个日期或范围。如果我想选择一个日期,则必须选择两次相同的日期才能启用“接受”按钮。选择第一个日期时可以启用“接受”按钮吗?
我在MaterialDatePicker.java中看到他们使用:
pickerFragment.addOnSelectionChangedListener(
new OnSelectionChangedListener<S>() {
@Override
public void onSelectionChanged(S selection) {
updateHeader();
confirmButton.setEnabled(dateSelector.isSelectionComplete());
}
@Override
public void onIncompleteSelectionChanged() {
confirmButton.setEnabled(false);
}
});
private fun showDatePicker() {
val builder = MaterialDatePicker.Builder.daterangePicker()
builder.setTheme(R.style.CustomCalendarDatePickerTheme)
builder.setCalendarConstraints(limitRange().build())
val picker = builder.build()
picker.addOnPositiveButtonClickListener {
tv_date.text = formatRange(it.first!!,it.second!!)
startDate = it.first
endDate = it.second
}
picker.show(supportFragmentManager,picker.toString())
}
解决方法
最后,当我第一次在开始和结束两者中设置日期时,我创建了一个扩展RangeDateSelector并覆盖select()函数的类:
@SuppressLint("RestrictedApi")
class CustomMaterialDatePicker : RangeDateSelector() {
private var first = true
private var firstDate: Long? = null
override fun select(selection: Long) {
if (first || selection < firstDate!!) {
super.select(selection)
super.select(selection)
firstDate = selection
first = false
} else {
super.select(firstDate!!)
super.select(selection)
if (selection != firstDate) {
first = true
}
}
}
}
然后我像这样创建DateRangePicker:
@SuppressLint("RestrictedApi")
private fun showDatePicker() {
val selector = CustomMaterialDatePicker()
val builder = MaterialDatePicker.Builder.customDatePicker(selector)
builder.setTheme(R.style.CustomCalendarDatePickerTheme)
builder.setCalendarConstraints(limitRange().build())
val picker = builder.build()
picker.addOnPositiveButtonClickListener {
tv_date.text = formatRange(it.first!!,it.second!!)
startDate = it.first
endDate = it.second
}
picker.show(supportFragmentManager,picker.toString())
}