将TextView绑定到Date

时间:2017-10-29 18:26:39

标签: android android-activity data-binding viewmodel jodatime

我想将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();
    }

我错过了什么?

1 个答案:

答案 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没有构建它,可能包含简单的语法错误]