【发布时间】:2019-03-06 16:43:56
【问题描述】:
我正在使用下面的代码实现与Observable的数据绑定
可观察
class Model() : BaseObservable() {
private var date :Long?=null
private var from :String?=null
private var to :String?=null
@Bindable
fun getFrom(): String? {
return from
}
@Bindable
fun getDate(): Long? {
return date
}
@Bindable
fun getTo(): String? {
return to
}
fun setFrom(data: String) {
from=data
notifyPropertyChanged(BR.from);
}
fun setTo(data: String) {
to=data
notifyPropertyChanged(BR.to)
}
fun setDate(data: Long) {
date=data
notifyPropertyChanged(BR.date)
}
fun formatDate():String? {
return date?.let { it1 -> TBDate(it1).format("dd MMM, yyyy") }
}
}
xml的视图
<android.support.design.widget.TextInputLayout
android:id="@+id/tip_date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_18"
app:layout_constraintBottom_toBottomOf="@+id/today"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/today"
app:layout_constraintTop_toTopOf="@+id/today">
<android.support.design.widget.TextInputEditText
android:id="@+id/et_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/date"
android:text="@{model.formatDate()}"
android:onClick="@{() -> handler.onClickDate()}"
android:editable="false"
android:focusableInTouchMode="false"
tools:text="12 Feb, Wednesday" />
</android.support.design.widget.TextInputLayout>
Java
override fun onClickXYZ () {
val calendar = Calendar.getInstance()
calendar.add(Calendar.DATE, 1)
viewModel.setDate(calendar.timeInMillis)
}
预期行为-每当使用 setDate() 更改 Observable 的日期值时,视图应以正确的格式更新日期值
实际行为-View 不会更新日期值。Observable 的 setDate() 被调用但 formatDate() 未被调用
【问题讨论】:
标签: android data-binding observable viewmodel