问题标签 [android-architecture-lifecycle]
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 - 在 viewModelScope 中设置后 LiveData 值为 null
我有一个带有搜索功能的片段的视图模型。我使用协程从 API 中获取数据,然后使用结果设置 MediatorLiveData 值,尽管对象列表反映在我的 RecyclerView 上。当我尝试使用 访问 MediatorLiveData 值时liveData.value
,它返回 null。我尝试过调试它,但尽管显示了对象列表,但我无法真正访问 ViewModel 中 livedata 的值
视图模型
存储库功能
我的代码如上所示,我已经被困了好几天了,任何帮助将不胜感激!}
android - LifecycleService 是否与生命周期扩展工件一起被弃用?
似乎以前存在于工件中的 LifecycleService 类lifecycle-extensions
在任何当前推荐的工件中都不可用。我希望它在 中lifecycle-runtime
,这是没有 ViewModel 和 LiveData 的,但LifecycleService
不在lifecycle-viewmodel
or中lifecycle-livedata
。
LifecycleService 是否已被弃用?
android - 如果未使用转换,则不会调用 MediatorLiveData 的 OnChanged
我正在关注https://github.com/android/architecture-components-samples/tree/88747993139224a4bb6dbe985adf652d557de621/GithubBrowserSample以获取示例应用程序。我可以看到他们使用 NetworkBoundResource 类来处理数据库操作和网络操作。
我现在面临的问题是如果我不使用 Transformations.map / Transformations.swtichMap 方法,MediatorLiveData onChanged 方法不会被调用。
我尝试使用它,但在使用多个输入的情况下遇到问题。
假设我有一个请求登录,它需要 3 个参数,即。用户名、密码和设备 ID。如何在视图模型中使用 Transformations.map / Transformations.swtichMap 进行多个输入。
下面是我的viewModel代码:
以下是我在存储库中的加载方法:
我正在观察响应:片段中的 LiveData 如下:
每次我调用它时,onChanged 方法都不会被调用。谁能告诉我这里应该是什么工作案例?或者我如何使用带有多个输入的 Transformations.map / Transformations.swtichMap?
android - 如何在 SavedStateHandle 感知 AndroidViewModel 中注入依赖项?
假设这样的视图模型:
我想Bar
使用 Dagger 2 进行注入。我正在 Android 上开发。
SavedStateViewModelFactory
如果你想在ViewModel
的构造函数中接收这个对象,你应该使用。
但是,SavedStateViewModelFactory
文档指出工厂是final
这意味着我也不能Bar
在那里注入。
到目前为止,我一直在通过 setter 进行注入:
有一个更好的方法吗?
我想使用构造函数注入,将Bar
实例变量标记为final
并消除setter。
android - 从 Lifecycle 对象获取 Activity 上下文
我已经让我的组件具有生命周期意识。我想在该组件中使用 activityContext 。
我的问题是:有什么方法可以从Lifecycle
对象中使用 activityContext 吗?
android - java.lang.IllegalStateException:没有maybeRun就不能取消调用
我正在尝试测试一个简单ViewModel
的Robolectric
.
这是我的ViewModel
GreetingsViewModel.kt
这是我的单元测试文件
GreetingsViewModelTest.kt
但是,当我运行测试时,我遇到了错误。
知道为什么吗?
注意:getOrAwaitValue()是一个扩展函数,用于获取 a 的值LiveData
或等待它有一个值,并带有超时。
android-livedata - 如何在 FragmentStateAdapter 的 createFragment 中初始化 ViewModel?
我有一个ExerciseDetailFragment
包含一个ExerciseFragmentStatePagerAdapter
来显示一堆SupportUsFragmentCard
. 这些卡可以由用户水平刷卡。
在我的ExerciseFragmentStatePagerAdapter
我有以下代码:
如您所见,寻呼机适配器只是实例化了SupportUsFragmentCard
,为此exercise
需要通过setExercise
.
SupportUsFragmentCard 如下所示:
它的实现传递exercise
到底层viewModel
。反过来又将其封装成一个LiveData
(SupportUsFragmentPlain
有观察者,但我省略了这段代码,因为它不是问题):
执行此代码时,它会崩溃并出现异常:
IllegalStateException:无法从分离的片段访问 ViewModel
我认为是因为createFragment
最终更新了viewModel
但实际上并没有出现在屏幕上。我也觉得这种工作方式不尊重 MVVM 架构。
在这种情况下,正确的方法是什么,使用 MVVM 和 LiveData在's函数中SupportUsViewModel
初始化's ?Exercise
ExerciseFragmentStatePagerAdapter
createFragment
android - How do I use MVVM with bound service?
I have a bound service that is started as foreground service for handling exoplayer.
Here is how my fragment handles the service -
The problem is that the service (obviously) restarts when the phone is rotated (config change). How do I architect my app in a way that the service is not restarted but just attaches itself to the fragment and its UI?
Placing it in a ViewModel
does not make sense because it is recommended to avoid putting android framework related stuff in there.