【问题标题】:passing activity/fragment reference to Databinded layout in MVVM architecture将活动/片段引用传递给 MVVM 架构中的数据绑定布局
【发布时间】:2019-08-05 07:34:06
【问题描述】:

我有一个使用 MVVM 和数据绑定的应用程序的简单示例,它基本上是两个 EditText,然后是一个按钮。 单击按钮应打开一个新活动。

是否有任何理由不将活动引用传递给布局,然后调用它来调用新活动?

<data>
    <variable
        name="firstActivity"
        type="com.example.view.FirstActivity"/>

</data>

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="@{() -> firstActivity.navigateToNextPage()"/>

【问题讨论】:

    标签: android kotlin mvvm data-binding


    【解决方案1】:

    它完全违反了 MVVM 架构,因为您总是将视图模型绑定到布局而不是视图。

    view 应该是独立的,以便获得松散耦合,例如在这种情况下,intent 代码位于 View 中,由布局直接调用,无需 viewmodel 干预。

    由于视图知道您将在什么基础上进行新活动,因此业务逻辑在视图中,这不是开发人员所做的常规方法。

    等等......我想了很多,那么解决方案是什么?往下看w

    1.创建各自View的ViewModel 2. 绑定你的editText 也绑定你的按钮,嘿但是这次用你的viewModel 等待。

    1. 在视图模型中编写业务逻辑。

    4.在布局的 OnClicked 中绑定该逻辑函数。

    1. 现在在视图模型中编写属性更改事件。

    2. 使用属性更改回调调用该属性更改事件。

    3. 你已经完成了,只有你可以点击你的 Intent 函数。

    所以最后 View 不知道为什么它会去不同的活动。

    注意:-

    堆栈溢出的新手,所以请原谅打破任何违反写作答案的行为。 谢谢

    【讨论】:

    • 但在这种情况下,ViewModel 除了将相同的函数传递给 Activity 之外什么都不做。它会像:在布局中:viewmodel.nextPage();在视图模型中:presenter.nextPage();
    • 它没有给活动传递任何乐趣,活动只是通过属性更改变量得到通知,当逻辑部分在视图模型中完成时,活动将在不知道为什么这样做的情况下完成它的工作,从而达到抽象。
    • 问题是,在这种特定情况下,视图模型中没有逻辑。只需单击一个按钮即可立即打开一个新活动。通过 layout-->viewmodel-->activity 的管道运行这个简单的任务似乎有点“夸张”。没有?
    • 是的,但这通常不会正确发生,您这样做可能是出于学习目的,但在现实世界中,您会发现大量的活动和片段,
    • 出现 MVVM 以使事情更具可读性和可测试性并实现松散耦合,我希望我对你有意义
    猜你喜欢
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多