android - 如何使用BindingAdapter和android Mvvm在edittext中显示日期并通过datepicker更新日期

标签 android kotlin android-databinding android-datepicker android-mvvm

我有一个buttoneditTtext,我想将今天的日期设置为edittext,然后用户可以使用按钮设置新日期并显示datepicker以选择一个新日期。我无法在edittext中设置当前日期的问题,我可以显示datepicker和选择内容。我使用了BindingAdapterMVVM。对于这种方法,任何指导或帮助我都是陌生的。

BindingAdapter:

@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"/>

View 模型:
val currentDate = MutableLiveData<String>()

最佳答案

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

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

关于android - 如何使用BindingAdapter和android Mvvm在edittext中显示日期并通过datepicker更新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57472499/

相关文章:

java - 如何使用给定对中的键从键/值对列表中检索值?

kotlin - 我正在尝试使用 Jetpack Compose 在 Android 中设置背景图片,但图片无法填满整个页面

android - 数据绑定(bind)和 MVVM。通过单击按钮显示 DatePickerDIalog

即使设置了lifecycleOwner,Android Fragment ViewModel数据绑定(bind)也不会更新UI

android - 太多的 XML 数据绑定(bind)

android - 支持 ICS 需要显式配置吗?

android - 使用 Android Intent 播放多首歌曲

java - AlertDialog If/Else 检查系统服务?

java - 从 Firebase 检索数据时出现 NullPointerException

android - Unresolved reference : findViewById in Kotlin