问题标签 [android-mvvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2956 浏览

android - 使用 MVVM 架构的 ViewModel 注入(视图内部)

这就是我Adapter使用MVVM (+Databinding)Dagger-2.11-rc2创建一个:

适配器:

可绑定视图持有者:

由于我使用的是 Dagger,因此我不会在ViewModels内部创建它们,Adapter而是在它们各自的Android.View. 我想这是有道理的,因为我Adapter可能有 XAndroid.View类型,那些视图可以有 YViewModel等等......

基础视图:

基础视图模型

ItemRowView(或任何视图):

现在,这种方法适用于活动、片段等,但是当我使用视图时,我必须创建一个ViewInjecton,因为 Dagger 没有开箱即用。这就是我的做法(阅读直到您到达“ViewInjection 几乎是其他注入器的副本。”

我的问题是:这是一个好方法吗?我是否正确使用了 MVVM 和 Dagger?有没有更好的方法可以在不创建ViewInjecton(并使用 Dagger-2.11)的情况下实现这一点?

谢谢你的时间。

ps:我已经使用了Adapter示例,但是如果我想使用视图而不是片段,这种方法是相同的。与Adapters您一起仅限于查看。

0 投票
1 回答
4512 浏览

android - MVVM Dagger2 组件中存在匹配键的绑定

我正在使用以下 google 示例项目:https ://github.com/googlesamples/android-architecture-components作为我的新项目的参考,并且在尝试向项目添加第二个活动时遇到困难。

这是我在编译时遇到的错误

这是我的代码

活动模块

应用组件

应用程序注入器

应用模块

FragmentBuilders 模块

可注射的

视图模型键

视图模型模块

应用

导航控制器

主要活动

联系活动

0 投票
6 回答
7761 浏览

android - Android数据绑定onLongClick不起作用

我有一个文本视图,需要为其创建 onLongClick 的侦听器。现在对于各自的视图模型,它有一个函数 sendLogs() 来处理 onClick 的逻辑。如果我将 onClick 更改为 onLongClick 函数,则永远不会被调用。有什么办法让它适用于 onLongClick?

onClick 直接链接到我的模型类函数,但不是 onLongClick。所以我认为模型类绑定是正确的,但我可能需要在这里做一些额外的工作。

0 投票
1 回答
3626 浏览

android - ViewModel + 数据绑定中的最佳实践和模式。ViewModel 中的 ObservableField 可以吗?

通过示例,我看到了 2 种使用 Android 架构组件的 MVVM 方法。

第一种方法:

  1. ViewModel提供LiveData
  2. Activity订阅LiveData
  3. 当被调用的观察者Activity将数据设置为ViewModel ObservableField.
  4. 整体ViewModel传递给绑定。
  5. xml你只是设置ObservableField为值

    /li>

优点:我不需要传递状态(例如“加载”),因为我更新listLoading ObservableField如下ViewModel

缺点:这种方法有什么缺点吗?

第二种方法:

  1. ViewModel提供LiveData
  2. Activity订阅LiveData
  3. 当被调用的观察者Activity被传递给绑定时
  4. 只有需要的对象(pojo)被传递给绑定

优点:这种方法有什么优点吗?

缺点:状态应该从ViewModel. 在这个来自 Google 的示例中,数据被包装在Resource对象中。

第一种方法用于Google 的另一个示例应用程序

我想从有更多使用 Android 数据绑定和 Android Arch 组件经验的开发人员那里了解这两种模式的优缺点。

0 投票
1 回答
6462 浏览

android - 如何使用数据绑定设置单击侦听器并将edittext字段值传递给视图模型

您好我正在尝试在我的 android 应用程序中使用数据绑定和 mvvm 架构。我想在布局中使用数据绑定添加单击侦听器,并将用户名和密码的值发送edittext到视图模型,它将执行 Web 服务并调用适当的方法LoginActivitylike startHomeActivity()

有谁知道该怎么做还是我采取了错误的方法?我有以下我的活动、布局和视图模型的代码片段

登录活动.kt

登录活动视图模型.kt

活动登录.xml

0 投票
4 回答
17856 浏览

android - 将 LiveData 与数据绑定一起使用

随着 Android 架构组件的稳定,我开始将所有基本组件更新ViewModelViewModel. 据我了解,LiveData建议使用 来保存Model类,因为它可以更好地处理生命周期。

我喜欢使用Data Binding它,因为它使 Java/Kotlin 端的代码更清晰,并且不需要“观察”值更改来更新 UI。但是,如果(或 ViewModel)扩展而没有扩展,则Data Binding仅使用监视数据的布局会发生变化。我了解主要目标之一是以编程方式观察和更新 UI,但对于简单的更新,非常有用。ModelBaseObservableLiveDataLiveDataData Binding

这个问题已经被报道过(GitHubStack Overflow),首先说 1.0 版会有这个问题,现在据说这个功能正在开发中。

为了同时使用LiveDataand Data Binding,我创建了一个非常简单的扩展类实现BaseObservable

所以基本上我ObservableMutableLiveData的是用于存储模型的副本,并且ObservableField通过LiveData这个实现,每次模型更新后布局都会更新。

问题是:

  • 这是一个糟糕的实现LiveData吗?这个包装器是否“破坏”了 的功能LiveData,例如生命周期感知?
  • 在我的理解中,LiveData是新的ObservableField. 这个对吗?
0 投票
0 回答
266 浏览

android - android mvvm room 数据库深层结构

我是 android 的初学者。我正在尝试使用新的 android MVVM 架构开发一个应用程序。参考下面GitHub的google示例代码:

https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample

我正在使用 Room、Data Binding、Retrofit、Dagger 2

我开发的列表活动适用于上述架构

我的 API 电影列表响应:

但我面临细节活动的问题我的电影细节 API 响应是:

在我的应用程序中,我有 2 个实体 1.MovieEntity 2.MovieSourceEntity

按照我的存储库代码:

此代码仅返回 MovieEntity 数据 loadFromDb 不返回 MovieSourceEntity ListOfData 任何人都知道如何实现这一点

回答

0 投票
5 回答
13535 浏览

android-room - 调用 getValue() 后 LiveData 对象一直为空

我想在 LiveDataObject 上更新我的存储库中的对象的成员变量。问题是,如果我调用 getValue() 方法,我会不断收到 NullPointerException,尽管该值确实存在于我的 Room-Library 中。

我现在的问题是,如何在不调用 observe() 方法的情况下从 LiveData 对象中获取值?(我无法在我的存储库中调用观察方法,因为该方法要我输入一个 LifeCycleOwner 引用,该引用不存在于我的存储库中)。

有没有办法从 LiveData- 对象中获取值?

我的架构是这样的:ViewModel --> Repository --> Dao

0 投票
3 回答
6785 浏览

android - Android ViewModel 在其 Host Activity 不在 Activity Stack 顶部且设备已旋转时重新创建

我处于以下情况:

我有一个OnboardActivity包含一个ViewModel,我可以OnboardActivity多次轮换,并且ViewModel在配置更改中持续存在而不会出现问题。

但是,如果我在这个 ( )Activity(FirebaseAuthActivity)之上启动另一个,然后我旋转设备并按下后退按钮。当被带到堆栈顶部时,它会再次重新创建实例。OnboardActivitystartActivityForResult(...)FirebaseAuthActivityOnboardActivityViewModel

这是ViewModel架构组件中的正常行为吗?

有没有一种方法可以告诉OnboardActivity当它从堆栈中弹出时,它的屏幕方向与保存的屏幕方向不同?

0 投票
2 回答
1325 浏览

android - 如果快速调用,android LiveData Observable 不会返回数据

开发需要一次性向同一端点发送多个 API 调用的应用程序。

例如 - 目录浏览场景,需要通过对当前文件夹中的所有文件夹发送 get 调用来获取目录结构。问题是,正确改造中的所有文件夹的响应都是分开的,但是 LiveData observable 只为整个列表提供了一个响应。

目录结构:-

可观察到以侦听回调:-

调用以获取数据的功能:-

改造对服务器的调用:-

数据如下: -

如您所见,数据仅针对一个文件夹出现在 Observable 中temp3

当在拨打电话时添加随机延迟时,数据会正确出现:-

现在至少数据来自 3 个文件夹中的 2 个:-

任何想法为什么会发生这种情况以及解决方法?

更新:- 添加有助于调用服务器的 ViewModel 构造函数

从 ViewModel 获取 Observable