当前位置: 首页 > 知识库问答 >
问题:

Android导航组件在弹出背包时执行操作

隗瑞
2023-03-14

我正在使用Android导航组件,尽管在刚开始的时候有一些问题,但它现在运行良好。

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

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

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

共有2个答案

云欣嘉
2023-03-14

我认为当时没有正确的方法,但您应该将视图模型的范围限定在导航图上,这样系统就会清除数据,您只需要处理导航,快速示例:

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);
}
汪才
2023-03-14

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

 类似资料:
  • 我有两个动作 但是我想知道如何使片段在退出时执行slide_out_left动画,并将其弹出堆栈。

  • 我正在一个新的Android应用程序上使用导航组件,但我不知道怎么做 首先,我有我的主活动,我有main_navigation_graph 主要活动 NavHostFragment main_navigation_graph里面有3个碎片 这里一切都很好。问题是当我到达最后一个片段时,因为在这个片段上,我想根据BottomNavigationView输入(暂时)显示一些子片段(在新的NavHost

  • 我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?

  • 我正在使用NavController:。一切都很好,直到我旋转我的设备,然后我无法和。 在日志中:FragmentNavigator:忽略popBackStack()调用:FragmentManager已保存其状态,而FragmentNavigator:忽略导航()调用:FragmentManager已保存其状态 当我看到谷歌的样本,他们没有任何关于这个问题,有所有的工作良好。所以我不明白这就是问

  • 我正在将我的应用程序更新为导航架构组件,我发现它在替换导航抽屉中可见的片段时存在延迟,无法顺利关闭。 直到现在,我一直在遵循这种方法: https://vikrammnit.wordpress.com/2016/03/28/facing-navigation-drawer-item-onclick-lag/ 所以我在中导航而不是在中导航以避免故障。 这是一个非常常见的问题,但它又回来了。使用导航组

  • 我想做的是 我正在使用Android导航组件来处理我的应用程序中的导航。在这个例子中,我有两个屏幕,屏幕A和屏幕B。我希望用户能够单击屏幕A中的按钮,并能够导航到屏幕B;然后被阻止回到前一个屏幕(屏幕A)。 问题所在 null MainActivity--它充当我的单个活动navhost。