片段在重新创建视图后会丢失ViewModel的数据

问题描述 投票:1回答:1

假设您有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的情况下,您还会遇到有关在片段内部更新数据的问题!

请帮帮我!

android mvvm android-databinding android-livedata
1个回答
0
投票

onViewCreated(View view, Bundle savedInstanceState)观察数据可能会解决。

© www.soinside.com 2019 - 2024. All rights reserved.