Material DateRangePicker启用带有单个日期的“接受”按钮

问题描述

我有一个重要的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);
      }
    });

我认为我需要使用此方法或类似方法,但是我无法使用此方法

我用它来显示DaterangePicker:

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())
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...