我们在fragment中经常使用LiveData的
引入了一个新的Lint检查,确保您在onCreateView()、onViewCreated()或onActivityCreated()中观察LiveData时使用getViewLifecycleOwner()。(b/137122478)https://developer.android.com/jetpack/androidx/releases/fragment 我们担心实现这个更改,因为我们不理解
此外,我们使用Android Navigation组件,并注意到当用户在同一activity中导航到不同的fragment时,每个fragment的
以下是我们在
为了在活动的多个片段之间保持viewmodel的持久性。
或者:
如果虚拟机不需要在当前片段之外持久存在,则可以不需要持久化。总结一下,当在片段的onCreateView()中观察LiveData对象时,将this更改为getViewLifeCycleOwner()是否会与ViewModel模式/导航组件冲突?例如,可能会出现LiveData更改会触发来自同一活动中先前片段的观察者的实例,用户从该实例中导航离开。从getViewLifeCycleOwner的文档中可以看出,进行此更改可能允许我们在每个片段的onDestroyView()中删除removeObservers()调用。这是正确的理解吗?
observe
方法。最近发布的androidx fragment sdk版本导致Android Studio将liveDataObject.observe(this)
的实例标记为错误,建议使用liveDataObject.observe(getViewLifecycleOwner())
。引入了一个新的Lint检查,确保您在onCreateView()、onViewCreated()或onActivityCreated()中观察LiveData时使用getViewLifecycleOwner()。(b/137122478)https://developer.android.com/jetpack/androidx/releases/fragment 我们担心实现这个更改,因为我们不理解
getViewLifecycleOwner()
的功能与使用this
相比有何区别,以及当在fragment中设置ViewModel时是否会与使用this
或this.getActivity()
发生冲突。此外,我们使用Android Navigation组件,并注意到当用户在同一activity中导航到不同的fragment时,每个fragment的
onDestroyView()
方法被调用,但不包括onDestroy()
。以下是我们在
onViewCreated()
中的代码示例。 vm.getStemLengths().observe(this, stemLengths -> {
this.stemLengths = new ArrayList<>(Stream.of(stemLengths).map(stemLength ->
new SearchModel(Integer.toString(stemLength.getValue()))).toList());
});
稍后,在onDestroyView()
中
vm.getStemLengths().removeObservers(this);
同时,根据片段的不同,包含LiveData的ViewModel将设置以下之一:
vm = new ViewModelProvider(this.getActivity()).get(PrepareVM.class);
为了在活动的多个片段之间保持viewmodel的持久性。
或者:
vm = new ViewModelProvider(this).get(AprobacionVM.class);
如果虚拟机不需要在当前片段之外持久存在,则可以不需要持久化。总结一下,当在片段的onCreateView()中观察LiveData对象时,将this更改为getViewLifeCycleOwner()是否会与ViewModel模式/导航组件冲突?例如,可能会出现LiveData更改会触发来自同一活动中先前片段的观察者的实例,用户从该实例中导航离开。从getViewLifeCycleOwner的文档中可以看出,进行此更改可能允许我们在每个片段的onDestroyView()中删除removeObservers()调用。这是正确的理解吗?
onDestroyView
,这是我犯的一个相当糟糕的打字错误,非常抱歉。视图生命周期确实以onDestroyView
结束。 - Eugen Pechanec