livedata

dojqjjoe  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(298)

我试图用java实现双向数据绑定,但我无法让它工作。似乎没有太多的材料,主要是Kotlin。我现在拥有:
简单的viewmodel
我必须创建mutablelivedata属性 public 当我通过 @={dashBoardViewModel.text} ,否则编译器会抱怨找不到fragmentdashboarddatabindingimpl。

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class DashboardViewModel extends ViewModel {

    public MutableLiveData<String> text;
    public MutableLiveData<String> name;

    public DashboardViewModel() {
        text = new MutableLiveData<>();
        name = new MutableLiveData<>();
        text.setValue("This is the dashboard");
    }

    public void onSave() {
        String oldValue = text.getValue();
        String newValue = "new value " + name.getValue();
        text.setValue(newValue);
    }
}

片段中的简单布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="dashBoardViewModel"
            type="example.com.ui.dashboard.DashboardViewModel" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        ...
        tools:context=".ui.dashboard.DashboardFragment">

        <TextView
            android:id="@+id/text_dashboard"
            ...
            android:text="@={dashBoardViewModel.text}"
            ... />

        <EditText
            ...
            android:inputType="textPersonName"
            android:text="@={dashBoardViewModel.name}"
            ... />

        <Button
            ...
            android:onClick="@{() -> dashBoardViewModel.onSave()}"
            ...
        />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

在我调用的构造函数中 text.setValue("This is the dashboard") 工作正常,数值显示良好。
在“click listener”对话框中 dashBoardViewModel.onSave() 我可以打电话 text.setValue(newValue) 并且它指定了正确的值,但该值从未显示。
所以呢 text.setValue() 似乎在同一类/同一示例中工作方式不同。
如有任何提示,我们将不胜感激。

pkbketx9

pkbketx91#

你可能忘了给 lifecycleowner 给你的 databinding . 你应该检查一下这个

相关问题