我想将TextView绑定到JodaTime日期,这样如果以编程方式更改日期的值,TextView将随之更改。我第一次成功地展示了它,但如果日期发生变化,视图就不会更新。
的TextView:
<TextView
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mainViewModel.day}" />
视图模型:
public class RoomListViewModel extends Observable{
private LocalDate day;
public String getDay(){
return day.toString("dd/MM/yyyy");
}
public void previousDay() {
day = day.plusDays(1);
setChanged();
notifyObservers();
}
public void nextDay() {
day = day.minusDays(1);
setChanged();
notifyObservers();
}
我错过了什么?
答案 0 :(得分:2)
您的变量命名实际上会让您感到困惑。
由于TextView
适用于String
类型,因此会调用您的方法getDay()
。在这种情况下根本不会调用ObservableField<LocalDate> day
(来自布局)。
您需要使用@Bindanble
注释才能动态更改布局。
示例:
private LocalDate mDay;
@Bindable
public String getDay(){
return mDay.toString("dd/MM/yyyy");
}
public void previousDay() {
mDay = mDay.plusDays(1);
notifyPropertyChanged(BR.day); // you will have to import this (something like com.yourproject.BR)
}
public void nextDay() {
mDay = mDay.minusDays(1);
notifyPropertyChanged(BR.day);
}
您的ViewModel需要继承BaseObservable
(如果可能)或实现Observable
接口(您只需复制BaseObservable
实现)。
[Haven没有构建它,可能包含简单的语法错误]