【发布时间】:2020-05-22 05:57:54
【问题描述】:
假设您有 2 个片段连接到一个(或多个)视图模型,并且在活动内部您将在它们之间切换。打开片段后,viewModel 会按预期工作,因此我开始监听 onCreate 方法的更改,代码示例:
viewModel = new ViewModelProvider(requireActivity(), new InventoryTasksFactory()).get(InventoryTasksViewModel.class);
viewModel.inventoryTasksResponse().observe(this, new Observer<Response<List<InventoryTask>>>() {
@Override
public void onChanged(Response<List<InventoryTask>> listResponse) {
handleResponse(listResponse);
}
});
但是当您切换到另一个片段并返回时,片段变为空白。我了解 viewModel 内部的片段监听发生了变化,您应该手动从 viewModel 获取值,我从 onCreateView 方法内部的 viewModel 获取值,代码示例:
Response<List<InventoryTask>> inventory = viewModel.inventoryTasksResponse().getValue();
if (inventory!=null){
handleResponse(inventory);
}
问题是 Response 有 3 个状态:正在运行、成功、错误,并且取决于这些状态视图正在更新。因此,在第一个片段打开时,视图更新两次,这会导致跳帧和显示闪烁。
我正在考虑将数据保存在片段中,但我想避免数据重复。除此之外,在 sharedViewModel 的情况下,您会遇到更新片段内部数据的问题!
请帮帮我!
【问题讨论】:
-
“视图更新两次”你能解释一下吗?你使用片段交易对吗?
-
感谢您的提问!是的,与动画的交易。我现在得到的是 Response.Running 和 Response.Success 变成了一堆响应,当视图创建时,视图更新为正在运行,然后更新为成功,这会导致跳帧。所以,我唯一能做的就是延迟从 repo 获取数据的过程。
标签: android mvvm android-databinding android-livedata