将 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 实现)。

[还没有构建它,可能包含简单的语法错误]