安卓导航组件在弹出后台时执行操作



我使用android导航组件,尽管早期出现了一些问题,但它现在运行良好。

我坚持一个活动多个片段的设计原则,并使用共享视图模型在片段之间进行通信。

我现在在我的应用程序中有一个场景,用户创建一些东西,保存它,然后返回到主列表片段(想想添加一个新联系人之类的事情,除了它涉及的不仅仅是在一些框中键入(

当用户保存我需要从视图模型中清除数据的信息时(这是出于安全考虑而非性能考虑(,因为它们是共享视图模型,因此与活动生命周期而非片段有关,因此它们不会自行清除,我可以在正常的流中实现这一点,只需将数据设置为null并调用navcontroller.popBackStack((,但如果用户自己按下按钮,我无法知道,因此无法清除这些视图模型,有什么想法吗?

您可以实现一个监听器接口(比如OnBackPressedListener(,并在您各自的片段中使用它来在按下后退按钮(或向上导航(时执行操作。界面将是你的碎片和活动之间的桥梁。

我认为当时还没有正确的方法,但你应该将你的视图模型扩展到你的导航图,这样系统就会清除数据,你只处理导航,快速示例:

private ViewModelStoreOwner getStoreOwner() {
NavController navController = Navigation
.findNavController(requireActivity(), R.id.root_navigator_fragment);
return navController.getViewModelStoreOwner(R.id.root_navigator);        
}

private void setUpSearchViewModel() {
searchViewModel = new ViewModelProvider(getStoreOwner()).get(SearchViewModel.class);
}

最新更新