问题标签 [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架构中PagerAdapter、RecyclerViewAdapter放在哪里合适
当我使用 MVVM 架构实现我的应用程序时。我总是有一个问题,我应该把PagerAdapter
和的实现放在哪里RecyclerViewAdapter
。现在我把Fragments
它作为内部类。
android - 带有 MVVM 的 RxJava:带有 setValue() 的 MutableLiveData 与 LiveDataReactiveStreams
假设您有一个带有 UI 层、ViewModel 和 Repository 的 MVVM 应用程序。假设在您的存储库中,您通过Single
Retrofit 调用从 API 获取一些数据,并将其转换为 UI 就绪的视图状态对象。
在我看来,您有两个主要选择(假设您想在 UI 层使用 LiveData,我不包括从 UI 观察 Rx 类型的选项):
Observable
从存储库中公开您的 Rx ,并subscribe()
在 ViewModel 中公开。在订阅者的onNext()
中,使用setValue()
将您的 viewstate 对象包装在 aMutableLiveData
中,并将其作为非可变对象公开LiveData
给 UI。在 中手动处置订阅onCleared()
。从存储库中公开您的 Rx并让 ViewModel 使用's
Observable
订阅它,在这种情况下,手动处置是不必要的,而且根本没有。但是,只要变为活动/不活动(又名至少有一个观察者),就会订阅/取消订阅,因此此选项将在每次配置更改时停止所有流处理,这与 (1) 不同(尽管只有在冷的情况下)。LiveDataReactiveStreams
fromPublisher()
MutableLiveData
LiveDataReactiveStreams
LiveData
Observable
这种分析在任何方面都是不正确或不完整的吗?这两种方法之间还有其他重要区别吗?
java - 如何从 MVVM 架构中的 Web 服务的存储库类与活动/片段进行通信
我是新手MVVM architecture
,我只想知道如何在和之间进行通信repository class
。UI (activity/fragment) class
我遇到了正在做这项工作以进行更新的实时数据same entities from both (remote and room database)
。
例如:1)如果我有名为用户的实体。我可以使用如下实时数据保存并观察它:(来自 android 开发者网站)。
2)但是我们如何在不需要实时数据但我只想显示或隐藏进度对话框的其他 API 中做到这一点(登录)取决于网络成功或错误消息。
android - 如何使用数据绑定创建焦点更改侦听器
我正在使用以下代码进行EditText
焦点更改事件,当我点击一个EditText
到另一个时它会工作,EditText
但是当我们点击外部时失败EditText
。我已经添加focusable="true"and focusableInTouchMode="true"
但它不起作用。
android - 如何在 mvvm 模式下在 android 中有一个带有房间的启动画面。?
我正在尝试使用我的 MVVM 模式登录活动来显示初始屏幕。我的启动画面确实可以正常工作,但是当它尝试完成并启动 LoginActivity 时,应用程序崩溃了。我收到此错误如下。
请帮我解决这个问题。我需要在我的项目中有一个带有 MVVM 模式和用于 LoginActivity 的房间数据库的 slapsh 屏幕。非常欢迎提供解释或代码示例。
我的飞溅活动
我的登录活动
我的登录视图模型
我得到的错误
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.comcredit.ccui.cclogin, PID: 19969 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.comcredit.ccui.cclogin/com.comcredit.ccui.cclogin.view .LoginActivity}:java.lang.RuntimeException:无法在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2858) 在 android.app.ActivityThread.handleLaunchActivity 创建类 com.comcredit.ccui.cclogin.view_model.LoginViewModel 的实例(ActivityThread.java:2933) 在 android.app.ActivityThread.-wrap11(Unknown Source:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1612) 在 android.os.Handler.dispatchMessage(Handler. java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android。app.ActivityThread.main(ActivityThread.java:6710) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com. android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 原因:java.lang.RuntimeException:无法在 android.arch.lifecycle.ViewModelProvider 创建类 com.comcredit.ccui.cclogin.view_model.LoginViewModel 的实例$NewInstanceFactory.create(ViewModelProvider.java:153) 在 android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:210) 在 android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134) 在 android。 com.comcredit 上的 arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)。ccui.cclogin.view.LoginActivity.onCreate(LoginActivity.java:45) 在 android.app.Activity.performCreate(Activity.java:6980) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 在 android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2811) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2933) 在 android.app.ActivityThread.-wrap11(Unknown Source:0) 在 android.app.ActivityThread$H。 handleMessage(ActivityThread.java:1612) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java :6710) 在 java.lang.reflect.Method。com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 处的调用(本机方法) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 引起:java。 lang.InstantiationException:java.lang.Class 在 android.arch 的 android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:151) 的 java.lang.Class.newInstance(Native Method) 没有零参数构造函数。 lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:210) at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134) at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102) at com .comcredit.ccui.cclogin.view.LoginActivity.onCreate(LoginActivity.java:45) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2811) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 在 android.app.Activity.performCreate(Activity.java:6980)。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:2933) 在 android.app.ActivityThread.-wrap11(Unknown Source:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1612) 在 android.os.Handler .dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6710) 在 java.lang.reflect.Method.invoke(本机方法)在 com.android.internal.os.Zygote$MethodAndArgsCaller。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 处运行(Zygote.java:240)
android - 如何使用 mvvm 模式显示警报对话框
我正在开发一个登录模块,如果登录不成功,我必须在其中显示警报对话框。我在 viewmodel 中有一个身份验证过程,我必须在警报对话框中显示一个错误。如何完成?
android - android权限代码和系统服务可以是viewmodel的一部分吗
我正在开发一个必须检查权限并且必须使用系统服务的应用程序。那么应该在哪里添加视图模型或活动?
android - 尝试使用 ViewModel 从后端获取数据但得到 IllegalArgumentException: Missing public, default no-argument constructor
我正在尝试从 Backendless 获取数据,我正在使用 kotlin 和 MVVM 架构。我对 Kotlin 和 MVVM 都很陌生。这些日期将显示在片段(位于选项卡中)的 recyclerView 中。我收到此错误:
..................................................... .....................
这是我的 BuyAdapter 的代码:
android-fragments - 我应该在两个片段之间共享我的 ViewModel 吗?
我正在尝试遵循 Android 最佳实践并使用最新推荐的架构组件。到目前为止,您可以在这里看到我的尝试:https ://github.com/randroid88/TodayILearned
目前该应用程序的功能非常有限。
- 它有一个 Room db 用于本地存储日记帐分录。
- 一个片段HomeFragment列出了所有条目
- 另一个片段EntryEditorFragment用于创建新条目。
- 一个 ViewModel, EntryViewModel,它通过存储库更新数据。
问题是现在只有 HomeFragment 可以访问 EntryViewModel。
因此,在我当前的设计中,我通过参数包(使用新导航架构组件中的 SafeArgs)将新条目文本从 EntryEditorFragment 传递给 HomeFragment ,然后 HomeFragment 通过 EntryViewModel 创建新条目:
这感觉不对。
如果 EntryViewModel 也可以访问 EntryEditorFragment 会更好吗?
为了做到这一点,我是否必须将 ViewModel 限定为 Activity,如本博客中所述?
这里的最佳做法是什么?