繁体   English   中英

Android 导航组件在弹出回栈时执行一个动作

[英]Android navigation component perform an Action when popping backstack

我使用的是 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM