首页 > 解决方案 > 使用 MVVM 重用组件的最佳实践

问题描述

我想知道是否有人在使用 MVVM 时找到了一些巧妙的解决方案来重用组件(多个视图)。

我所说的组件是指最终在应用程序中重用的一组视图。例如,由 anImageView和 a组成的空状态,为了示例,我们还为文本TextView添加某种类型。ClickListener

现在,我想做的是在多个 .xml 文件中重用此视图,但为文本、图像提供不同的值,并将侦听器绑定到 Fragment 中的操作ViewModel

我一直在做的是创建一个CustomEmptyState可以扩展一个LinearLayout或某种布局并添加Custom Attributes到它的。

所以,最后,我会像这样使用我的自定义视图:

<com.whatever.customViews.CutomEmptyState
     app:image="@drawable/someImage"
     app:text="@string/empty_text"
     app:onTextClicked="@{viewModel.onEmptyStateClicked()}" />

我的问题是,有不同的方法吗?一个更好的?我不喜欢用<declare-styleable>and all 编写自定义属性,因为那时我必须跟踪 3 个文件:

  1. 基础视图的.xml布局
  2. .java/.kt具有处理属性的样板代码的视图
  3. 具有<declare-styleable>所有属性的

有什么办法可以结合2和3吗?

标签: androidandroid-jetpack

解决方案


比如说,你必须显示一些你确定会被数据绑定的文本值。

然后,如果您对值进行数据绑定,那么有一种方法,但不是一种优雅的方法。

在自定义视图中声明一个变量,例如: private var status = ""

然后写一个setter函数:

fun setStatus(status: String) {
    this.status = status
    //refresh your views based on value or set this to the text view 
}

然后像这样进行数据绑定:

app:status="@{viewModel.status}"

这样您就不需要再声明样式了


推荐阅读