【问题标题】:Can ViewModel has static methods?ViewModel 可以有静态方法吗?
【发布时间】:2021-09-10 22:06:43
【问题描述】:

我有多个具有相同 CardView 的活动。为了给这个 CardView 充气,我在我的适配器中重用了 ViewHolder。现在我正在尝试使用setOnClickListener() 处理对 ViewHolder 的单击,并且我需要使用存储库将 CardView 表示的模型保存到数据库中。因此对于 MVVM,存储库只能与 ViewModel 和数据库或其他资源进行通信,但每个 Activity 都有不同的 ViewModel,因此我无法将 ViewModel 传递给 Adapter 以将模型更新到数据库中。

所以我认为我重用的适配器只需要一个 ViewModel 用于数据库操作,与使用它的 Activity 无关。 所以我需要在主 ViewModel 中使用一个静态方法来保存该模型。

这种方法对 MVVM 模式是否正确?

【问题讨论】:

    标签: android mvvm android-adapter android-viewmodel


    【解决方案1】:

    我不知道我是否正确理解了您的问题,但我猜您想以某种方式将数据从 recyclerview 适配器发送到您的数据库。

    "so I couldn't pass the ViewModel to the Adapter to update the Model into the Database"
    

    您应该永远将任何 viewModel 传递给 adapter 类,因为您会将它们紧密耦合在一起,并且它们将不再可重用。

    在您的情况下,您应该从 adapter 类发送数据并在 activity 中接收它。然后 activity 应该调用 viewModel 来更新特定的数据,viewModel 会调用 repository 来访问数据库并保存数据.

    这听起来很复杂,但组织得很好,您可以在许多活动/片段中重用所有组件,因为它们不相互依赖。 适配器发送您的活动接收到的事件,但适配器不知道(也不应该知道)哪个活动将接收数据。如果您将 viewModel 作为参数传递给适配器类,则它不能用于具有不同 viewModelactivities

    P.S 尽量不要将 activity 用于所有视图,在 Android 中,我们有一个 Fragment 组件,在这种情况下非常有用。

    有用的链接

    【讨论】:

    • 是的,我正在尝试将点击侦听器从活动传递给适配器。在这种情况下,适配器可以保存模型,因为监听器知道 ViewModel
    • 你能给我看一下这个监听器的代码示例吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多