将 TextView 绑定到日期
bind TextView to Date
我想将 TextView 绑定到 JodaTime 日期,这样如果以编程方式更改日期值,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();
}
我错过了什么?
您的变量命名实际上让您感到困惑。
由于 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
实现)。
[还没有构建它,可能包含简单的语法错误]
我想将 TextView 绑定到 JodaTime 日期,这样如果以编程方式更改日期值,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();
}
我错过了什么?
您的变量命名实际上让您感到困惑。
由于 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
实现)。
[还没有构建它,可能包含简单的语法错误]