我想获得一个选定的日期的 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"
/>
我做了什么来检查你的问题(我仍然看到关于未知属性的消息,但除了没有问题)。
在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的年月日的变化。
你可以从监听器中获取数据。
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