【问题标题】:bind TextView to Date将 TextView 绑定到日期
【发布时间】:2018-04-10 18:02:50
【问题描述】:

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

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    你的变量命名实际上让你感到困惑。

    由于TextViewString 类型一起使用,它调用您的方法getDay()ObservableField&lt;LocalDate&gt; 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 实现)。

    [尚未构建,可能包含简单的语法错误]

    【讨论】:

    • 我的 ViewModel 已经扩展了 java.util.Observable,我看不到如何使用我的配置来做到这一点。如果我实现 databinding.Observable 我想我必须使用 addOnPropertyChangedCallback 来监听属性的变化,但是该怎么做呢?
    • 好吧,android 数据绑定不适用于java.util.Observable。它适用于android.databinding.Observable。与其扩展它,不如从已经需要实现的BaseObservable 扩展。然后只需拨打notifyPropertyChanged(BR.day);
    • 是的,我知道,不幸的是,这个应用程序就是这样构建的。对于这种特殊情况,我需要快速修复。无论如何,谢谢你,有用的信息:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多