Android 数据绑定和 ViewModel 无法正常工作。

5
我有一个ViewModel类和一个包含它的Model类。
class WorksheetViewModel {

    private Worksheet worksheet;

    public Worksheet getWorksheet() {
        return worksheet;
    }

    public void setWorksheet(Worksheet worksheet) {
        this.worksheet = worksheet;
        if (worksheet != null) showButtons();

        Logger.E(worksheet.getShort_text());
    }

这里是有效的代码:Logger.E(worksheet.getShort_text());

而且在我的xml文件中

<import type="android.view.View" />

<variable
    name="viewModel"
    type="viewmodels.WorksheetViewModel" />

...

还有一个带有文本的视图:

android:text="@{viewModel.worksheet.short_text + `?`}"

我的问题是,viewModel.worksheet.short_text 总是为空。为什么?
binding.setViewModel(new WorksheetViewModel());
binding.executePendingBindings();

此外,我拥有所有的HTML。
Worksheet extends BaseObservable

并且

  @Bindable
    public String getShort_text() {
        return short_text;
    }

在我的工作表中

尝试:android:text="@{viewModel.worksheet.getShort_text + ?}。 - Alessandro Verona
2个回答

7
问题在于你只是在绑定中设置了ViewModel:binding.setViewModel(new WorksheetViewModel());但是WorksheetViewModel也有一个Worksheet对象,而且它是空白的。

所以应该是这样的:

WorksheetViewModel viewModel = new WorksheetViewModel();
viewModel.setWorksheet(new WorkSheet('short text value'))
binding.setViewModel(viewModel);

2
如果在binding.setViewmodel()中遇到错误,可以通过binding.setViewmodel()解决。在setViewmodel中,Viewmodel是在布局中给定的变量名。保留HTML标签。

e.g

<data>
     <variable
        name="userviewmodel"
        type="com.example.mvvmtest.viewmodel.LoginViewModel" />
</data>

然后使用,binding.setUserviewmodel()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接