问题标签 [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.

0 投票
1 回答
811 浏览

android - 在 viewModelScope 中设置后 LiveData 值为 null

我有一个带有搜索功能的片段的视图模型。我使用协程从 API 中获取数据,然后使用结果设置 MediatorLiveData 值,尽管对象列表反映在我的 RecyclerView 上。当我尝试使用 访问 MediatorLiveData 值时liveData.value,它返回 null。我尝试过调试它,但尽管显示了对象列表,但我无法真正访问 ViewModel 中 livedata 的值

视图模型

存储库功能

我的代码如上所示,我已经被困了好几天了,任何帮助将不胜感激!}

0 投票
1 回答
838 浏览

android - LifecycleService 是否与生命周期扩展工件一起被弃用?

似乎以前存在于工件中的 LifecycleService 类lifecycle-extensions在任何当前推荐的工件中都不可用。我希望它在 中lifecycle-runtime,这是没有 ViewModel 和 LiveData 的,但LifecycleService不在lifecycle-viewmodelor中lifecycle-livedata

LifecycleService 是否已被弃用?

当前生命周期工件的来源

0 投票
0 回答
65 浏览

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?

0 投票
1 回答
717 浏览

android - 如何在 SavedStateHandle 感知 AndroidViewModel 中注入依赖项?

假设这样的视图模型:

我想Bar使用 Dagger 2 进行注入。我正在 Android 上开发。

根据SavedStateHandle文档

SavedStateViewModelFactory如果你想在ViewModel的构造函数中接收这个对象,你应该使用。

但是,SavedStateViewModelFactory文档指出工厂是final这意味着我也不能Bar在那里注入。

到目前为止,我一直在通过 setter 进行注入:

有一个更好的方法吗?

我想使用构造函数注入,将Bar实例变量标记为final并消除setter。

0 投票
1 回答
263 浏览

android - 从 Lifecycle 对象获取 Activity 上下文

我已经让我的组件具有生命周期意识。我想在该组件中使用 activityContext 。

我的问题是:有什么方法可以从Lifecycle对象中使用 activityContext 吗?

0 投票
3 回答
838 浏览

android - java.lang.IllegalStateException:没有maybeRun就不能取消调用

我正在尝试测试一个简单ViewModelRobolectric.

这是我的ViewModel

GreetingsViewModel.kt

这是我的单元测试文件

GreetingsViewModelTest.kt

但是,当我运行测试时,我遇到了错误。

知道为什么吗?

注意:getOrAwaitValue()是一个扩展函数,用于获取 a 的值LiveData或等待它有一个值,并带有超时。

0 投票
0 回答
210 浏览

android-livedata - 如何在 FragmentStateAdapter 的 createFragment 中初始化 ViewModel?

我有一个ExerciseDetailFragment包含一个ExerciseFragmentStatePagerAdapter来显示一堆SupportUsFragmentCard. 这些卡可以由用户水平刷卡。

在此处输入图像描述

在我的ExerciseFragmentStatePagerAdapter我有以下代码:

如您所见,寻呼机适配器只是实例化了SupportUsFragmentCard,为此exercise需要通过setExercise.

SupportUsFragmentCard 如下所示:

它的实现传递exercise到底层viewModel。反过来又将其封装成一个LiveDataSupportUsFragmentPlain有观察者,但我省略了这段代码,因为它不是问题):

执行此代码时,它会崩溃并出现异常:

IllegalStateException:无法从分离的片段访问 ViewModel

我认为是因为createFragment最终更新了viewModel但实际上并没有出现在屏幕上。我也觉得这种工作方式不尊重 MVVM 架构。

在这种情况下,正确的方法是什么,使用 MVVM 和 LiveData在's函数中SupportUsViewModel初始化's ?ExerciseExerciseFragmentStatePagerAdaptercreateFragment

0 投票
1 回答
359 浏览

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.