DatePicker日,月&年的双向数据绑定属性丢失?

问题描述 投票:0回答:1

我想获得一个选定的日期的 DatePicker 通过双向数据绑定。本指南 从谷歌,应该有三个属性为我的 DatePicker,

android:year
android:month
android:day

这些属性是为了双向数据绑定而设计的。

然而,这些属性并没有出现在我的 DatePicker.

我是否遗漏了一些依赖性,也许?如何使用双向数据绑定来获取所选日期?

这是 DatePicker的XML。

<DatePicker
    android:id="@+id/date_picker"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:calendarViewShown="false"
    android:datePickerMode="spinner"
    app:layout_constraintEnd_toEndOf="@id/guideline_end"
    app:layout_constraintStart_toStartOf="@id/guideline_start"
    app:layout_constraintTop_toTopOf="@id/guideline_top"
    />
android datepicker android-databinding
1个回答
1
投票

我做了什么来检查你的问题(我仍然看到关于未知属性的消息,但除了没有问题)。

在XML中:

<DatePicker
     android:layout_width="wrap_content"
     android:datePickerMode="spinner"
     android:year="@={viewModel.year}"
     android:month="@={viewModel.month}"
     android:day="@={viewModel.day}"
     android:onDateChanged="@{(v, year, month, day) -> viewModel.onDateChanged(year, month, day)}"
     android:layout_height="wrap_content"/>

在XML中: 在ViewModel中:

var year: MutableLiveData<Int> = MutableLiveData(2020)
var month: MutableLiveData<Int> = MutableLiveData(5)
var day: MutableLiveData<Int> = MutableLiveData(22)

fun onDateChanged(year: Int, month: Int, day: Int){
    Log.v("Test_Picker", "$year $month $day")
}

所以在日期改变后,ViewModel的onDateChanged会被调用 我可以在Fragment中观察到LiveData的年月日的变化。


0
投票

你可以从监听器中获取数据。

 date_picker.setOnDateChangedListener { datePicker, year, month, day ->

       Log.v("Rene", "Year: $year Month: $month Day: $day")

 }

或者直接调用DatePicker

  date_picker.dayOfMonth
  date_picker.month
  date_picker.year
© www.soinside.com 2019 - 2024. All rights reserved.