Привязка данных не обновляет вид текста - PullRequest
0 голосов
/ 06 марта 2019

Я использую приведенный ниже код, реализующий привязку данных с Observable

Наблюдаемые

class Model() : BaseObservable() {

    private var  date :Long?=null
    private var  from :String?=null
    private var  to :String?=null


    @Bindable
    fun getFrom(): String? {
        return from
    }

    @Bindable
    fun getDate(): Long? {
        return date
    }

    @Bindable
    fun getTo(): String? {
        return to
    }

    fun setFrom(data: String) {
        from=data
        notifyPropertyChanged(BR.from);
    }

    fun setTo(data: String) {
        to=data
        notifyPropertyChanged(BR.to)
    }


    fun setDate(data: Long) {
        date=data
        notifyPropertyChanged(BR.date)

    }

    fun formatDate():String? {
        return date?.let { it1 -> TBDate(it1).format("dd MMM, yyyy") }

    }

}

xml's view

<android.support.design.widget.TextInputLayout
    android:id="@+id/tip_date"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/dp_16"
    android:layout_marginRight="@dimen/dp_18"
    app:layout_constraintBottom_toBottomOf="@+id/today"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@+id/today"
    app:layout_constraintTop_toTopOf="@+id/today">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/et_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/date"
        android:text="@{model.formatDate()}"
        android:onClick="@{() -> handler.onClickDate()}"
        android:editable="false"
        android:focusableInTouchMode="false"
        tools:text="12 Feb, Wednesday" />

</android.support.design.widget.TextInputLayout>

Java

override fun onClickXYZ () {
    val calendar = Calendar.getInstance()
    calendar.add(Calendar.DATE, 1)
    viewModel.setDate(calendar.timeInMillis)
}

Ожидаемое поведение -Когда значение даты Observable изменяется с помощью setDate(), представление должно обновлять значение даты в правильном формате

Фактическое поведение -Просмотр не обновляет значение даты. Наблюдаемый setDate() вызывается, но formatDate() не вызывается

1 Ответ

0 голосов
/ 06 марта 2019

Как насчет этого:

 var formattedDate: String? = null


 fun setDate(data: Long) {
     date=data
     formatDate(date)
     notifyPropertyChanged(BR.date)
 }

 fun formatDate(date: Long):String? {
     formattedDate = date.let { it1 -> TBDate(it1).format("dd MMM, yyyy") }
     notifyPropertyChanged(BR.formattedDate)
 }

И в xml вы должны использовать:

 <android.support.design.widget.TextInputEditText
        android:id="@+id/et_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/date"
        android:text="@{model.formattedDate}"  <--
        ...
 </android.support.design.widget.TextInputLayout>
...