假设您有2个片段连接到一个(或多个)viewModel,并且在活动内部您将在它们之间切换。一旦打开片段,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);
}
问题是响应具有3种状态:运行,成功,错误,并且取决于这些状态视图是否正在更新。因此,在第一个片段打开时,视图更新了两次,这导致跳帧和显示闪烁。
我当时正在考虑将数据保留在片段中,但是我想避免重复数据。除此之外,在sharedViewModel的情况下,您还会遇到有关在片段内部更新数据的问题!
请帮帮我!
从onViewCreated(View view, Bundle savedInstanceState)
观察数据可能会解决。