小编use*_*779的帖子

在Activity和ViewModel之间传递数据

我正在学习用于Android编程的新体系结构组件,并且很难理解一项活动的职责。我知道他们只应该处理UI,这很有意义,但是到什么程度呢?假设我有一个活动,最初有一个EditText,用户可以在其中输入String。在此下方有一个按钮,用于添加另一个EditText供用户输入另一个String。在后台如何处理这些数据?我提出的两个解决方案如下:

1)处理ViewModel中的数据。

用户单击按钮->活动告诉ViewModel-> ViewModel维护EditTexts列表->完成操作后,活动告诉ViewModel-> ViewModel处理数据

我用这种方法看到的问题是,现在ViewModel中有UI元素,我将不得不处理某种状态(用户添加一些EditTexts,然后取消整个操作,而ViewModel必须清除其列表)

2)处理活动中的数据。

用户单击按钮->活动将维护EditText列表->完成操作后,活动将字符串列表发送到ViewModel-> ViewModel处理数据

我用这种方法看到的问题是,如果曾经替换过该视图,则视图中现在必须替换逻辑,而不是应有的“愚蠢”。

处理这种情况的首选方式是什么?

android mvvm

5
推荐指数
1
解决办法
1945
查看次数

使用MVVM架构和数据绑定时如何突出显示recyclerview项目?

我试图在遵守 MVVM 原则并使用数据绑定的同时突出显示 recyclerview 项目。但我无法理解如何处理选择行。

我目前使用以下接口将我的 recyclerview 项目 onclick 传递到视图模型:

public interface ItemClickListener
{
    void onItemClicked(String id);
}
Run Code Online (Sandbox Code Playgroud)

onclick 视图是数据绑定的:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="model"
            type="Item" />

        <variable
            name="listener"
            type="ItemClickListener" />
    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{model.name}"
        android:onClick="@{() -> listener.onItemClicked(model.name)}" />
</layout>
Run Code Online (Sandbox Code Playgroud)

视图模型实现了该接口,因此我可以引用该项目。侦听器在活动中实例化并传递到适配器中。

我将如何处理选择 recyclerview 项目(并为其指定背景颜色)?viewholder 是否应该实现 onClickListener(View view) 并将其及其位置通过我的界面传递?

android android-recyclerview android-databinding android-mvvm

5
推荐指数
1
解决办法
1943
查看次数