问题标签 [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.
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
您一起仅限于查看。
android - MVVM Dagger2 组件中存在匹配键的绑定
我正在使用以下 google 示例项目:https ://github.com/googlesamples/android-architecture-components作为我的新项目的参考,并且在尝试向项目添加第二个活动时遇到困难。
这是我在编译时遇到的错误
这是我的代码
活动模块
应用组件
应用程序注入器
应用模块
FragmentBuilders 模块
可注射的
视图模型键
视图模型模块
应用
导航控制器
主要活动
联系活动
android - Android数据绑定onLongClick不起作用
我有一个文本视图,需要为其创建 onLongClick 的侦听器。现在对于各自的视图模型,它有一个函数 sendLogs() 来处理 onClick 的逻辑。如果我将 onClick 更改为 onLongClick 函数,则永远不会被调用。有什么办法让它适用于 onLongClick?
onClick 直接链接到我的模型类函数,但不是 onLongClick。所以我认为模型类绑定是正确的,但我可能需要在这里做一些额外的工作。
android - ViewModel + 数据绑定中的最佳实践和模式。ViewModel 中的 ObservableField 可以吗?
通过示例,我看到了 2 种使用 Android 架构组件的 MVVM 方法。
第一种方法:
ViewModel
提供LiveData
Activity
订阅LiveData
- 当被调用的观察者
Activity
将数据设置为ViewModel
ObservableField
. - 整体
ViewModel
传递给绑定。 在
/li>xml
你只是设置ObservableField
为值
优点:我不需要传递状态(例如“加载”),因为我更新listLoading
ObservableField
如下ViewModel
:
缺点:这种方法有什么缺点吗?
第二种方法:
ViewModel
提供LiveData
Activity
订阅LiveData
- 当被调用的观察者
Activity
被传递给绑定时 - 只有需要的对象(pojo)被传递给绑定
优点:这种方法有什么优点吗?
缺点:状态应该从ViewModel
. 在这个来自 Google 的示例中,数据被包装在Resource
对象中。
第一种方法用于Google 的另一个示例应用程序
我想从有更多使用 Android 数据绑定和 Android Arch 组件经验的开发人员那里了解这两种模式的优缺点。
android - 如何使用数据绑定设置单击侦听器并将edittext字段值传递给视图模型
您好我正在尝试在我的 android 应用程序中使用数据绑定和 mvvm 架构。我想在布局中使用数据绑定添加单击侦听器,并将用户名和密码的值发送edittext
到视图模型,它将执行 Web 服务并调用适当的方法LoginActivity
like startHomeActivity()
。
有谁知道该怎么做还是我采取了错误的方法?我有以下我的活动、布局和视图模型的代码片段
登录活动.kt
登录活动视图模型.kt
活动登录.xml
android - 将 LiveData 与数据绑定一起使用
随着 Android 架构组件的稳定,我开始将所有基本组件更新ViewModel
为ViewModel
. 据我了解,LiveData
建议使用 来保存Model
类,因为它可以更好地处理生命周期。
我喜欢使用Data Binding
它,因为它使 Java/Kotlin 端的代码更清晰,并且不需要“观察”值更改来更新 UI。但是,如果(或 ViewModel)扩展而没有扩展,则Data Binding
仅使用监视数据的布局会发生变化。我了解主要目标之一是以编程方式观察和更新 UI,但对于简单的更新,非常有用。Model
BaseObservable
LiveData
LiveData
Data Binding
这个问题已经被报道过(GitHub和Stack Overflow),首先说 1.0 版会有这个问题,现在据说这个功能正在开发中。
为了同时使用LiveData
and Data Binding
,我创建了一个非常简单的扩展类实现BaseObservable
:
所以基本上我ObservableMutableLiveData
的是用于存储模型的副本,并且ObservableField
通过LiveData
这个实现,每次模型更新后布局都会更新。
问题是:
- 这是一个糟糕的实现
LiveData
吗?这个包装器是否“破坏”了 的功能LiveData
,例如生命周期感知? - 在我的理解中,
LiveData
是新的ObservableField
. 这个对吗?
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 任何人都知道如何实现这一点
回答
android-room - 调用 getValue() 后 LiveData 对象一直为空
我想在 LiveDataObject 上更新我的存储库中的对象的成员变量。问题是,如果我调用 getValue() 方法,我会不断收到 NullPointerException,尽管该值确实存在于我的 Room-Library 中。
我现在的问题是,如何在不调用 observe() 方法的情况下从 LiveData 对象中获取值?(我无法在我的存储库中调用观察方法,因为该方法要我输入一个 LifeCycleOwner 引用,该引用不存在于我的存储库中)。
有没有办法从 LiveData- 对象中获取值?
我的架构是这样的:ViewModel --> Repository --> Dao
android - Android ViewModel 在其 Host Activity 不在 Activity Stack 顶部且设备已旋转时重新创建
我处于以下情况:
我有一个OnboardActivity
包含一个ViewModel
,我可以OnboardActivity
多次轮换,并且ViewModel
在配置更改中持续存在而不会出现问题。
但是,如果我在这个 ( )Activity(FirebaseAuthActivity)
之上启动另一个,然后我旋转设备并按下后退按钮。当被带到堆栈顶部时,它会再次重新创建实例。OnboardActivity
startActivityForResult(...)
FirebaseAuthActivity
OnboardActivity
ViewModel
这是ViewModel
架构组件中的正常行为吗?
有没有一种方法可以告诉OnboardActivity
当它从堆栈中弹出时,它的屏幕方向与保存的屏幕方向不同?
android - 如果快速调用,android LiveData Observable 不会返回数据
开发需要一次性向同一端点发送多个 API 调用的应用程序。
例如 - 目录浏览场景,需要通过对当前文件夹中的所有文件夹发送 get 调用来获取目录结构。问题是,正确改造中的所有文件夹的响应都是分开的,但是 LiveData observable 只为整个列表提供了一个响应。
目录结构:-
可观察到以侦听回调:-
调用以获取数据的功能:-
改造对服务器的调用:-
数据如下: -
如您所见,数据仅针对一个文件夹出现在 Observable 中temp3
。
当在拨打电话时添加随机延迟时,数据会正确出现:-
现在至少数据来自 3 个文件夹中的 2 个:-
任何想法为什么会发生这种情况以及解决方法?
更新:- 添加有助于调用服务器的 ViewModel 构造函数
从 ViewModel 获取 Observable