如何在 edittext 中显示日期并使用 BindingAdapter 和 android Mvvm 通过日期选择器更新它

How to display date in edittext and update it via datepicker using BindingAdapter and android Mvvm

我有一个 buttoneditTtext 我想将今天的日期设置为编辑文本然后用户可以使用按钮设置新日期并将 datepicker 显示为 select 一个新的。我无法在 edittext 中设置当前日期的问题 我可以显示 datepicker 和 selection。我使用了 BindingAdapterMVVM 我是这种方法的新手,请提前感谢任何指南或帮助。

绑定适配器:

@BindingAdapter("selectDate")
fun bindDateClicks(button: Button,mutableLiveData: MutableLiveData<String>) {
    button.setOnClickListener {
        selectDate(button.context,mutableLiveData)
    }
}

fun selectDate(context: Context,mutableLiveData: MutableLiveData<String>) {
    val c = Calendar.getInstance()
    val year = c.get(Calendar.YEAR)
    val month = c.get(Calendar.MONTH)
    val day = c.get(Calendar.DAY_OF_MONTH)


    val datePickerDialog = DatePickerDialog(context,
        DatePickerDialog.OnDateSetListener {
                view, year, monthOfYear, dayOfMonth ->
            mutableLiveData.value = year.toString() + "-" + (monthOfYear + 1) + "-" + dayOfMonth.toString()
        },year,month,day)
    datePickerDialog.show()

}

按钮:

 <Button
                android:text="set Date"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button3"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginEnd="8dp"
                app:layout_constraintStart_toStartOf="parent"
                android:layout_marginStart="8dp"
                app:selectDate="@{viewModel.currentDate}"
                app:layout_constraintTop_toBottomOf="@+id/spinner3"
                android:layout_marginTop="48dp"
                app:layout_constraintHorizontal_bias="0.0"
                android:layout_marginBottom="8dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintVertical_bias="0.005"/>

视图模型:

val currentDate = MutableLiveData<String>()

首先, 对话框应该是 activity/fragment.

的一部分

考虑到这一点,您真的不需要为此配备适配器。 考虑数据绑定 - 您可能希望使用单独的片段在其中包含日期选择器。在这种情况下,您可以共享 ViewModel 来共享日期值。

请注意,在自定义绑定适配器中,您可以使用 String 而不是 LiveData<String>

为 ViewModel 中的日期创建实时数据或可观察字段(最初分配默认日期)。

日期选择器对话框应该是 activity 或片段级别。 当日期从日期选择器中更改时,将日期更新到 ViewModel 中。将 Viewmodel 定义到布局文件中。