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

Fragment lose data from ViewModel after recreating view

假设您有 2 个片段连接到一个(或多个)viewModel,并且在 activity 内部您将在它们之间切换。打开片段后,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 种状态:运行、Success、Error,并且取决于这些状态,视图正在更新。因此,在第一个片段打开时,视图更新两次,这会导致跳帧和显示闪烁。

我正在考虑将数据保存在片段中,但我想避免数据重复。除此之外,在 sharedViewModel 的情况下,您会遇到有关更新片段内部数据的问题!

请帮帮我!

onViewCreated(View view, Bundle savedInstanceState) 观察您的数据可能会奏效。