在屏幕旋转后,重新创建片段会导致LiveData观察者重新注册,可能会导致数据重复加载或其他问题。为了解决这个问题,可以使用ViewModel来保存LiveData实例,并在片段重新创建时重用它。
以下是一个示例代码:
public class MyFragment extends Fragment {
private SharedViewModel sharedViewModel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取共享的ViewModel
sharedViewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 省略布局文件的加载
// 观察LiveData数据
sharedViewModel.getData().observe(getViewLifecycleOwner(), new Observer() {
@Override
public void onChanged(String data) {
// 更新UI
}
});
// 返回根视图
return rootView;
}
}
在上面的代码中,我们通过ViewModelProviders.of(requireActivity()).get(SharedViewModel.class)来获取共享的ViewModel实例。这样,在屏幕旋转后,ViewModel实例将保持不变,并且LiveData观察者也将保持注册状态。这样就确保了数据的一致性,避免了重复加载数据或其他问题。
下一篇:不要在Promise中看到函数