Android导航组件在弹出堆栈时执行操作

时间:2018-12-12 20:32:59

标签: android back-button android-jetpack android-viewmodel android-architecture-navigation

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

我将许多片段的设计原则保持不变,并且使用共享的视图模型在片段之间进行通信。

我现在在我的应用程序中有一个场景,其中用户创建了一些东西,将其保存并返回到主列表片段(想像添加新联系人之类的东西,除了它涉及的内容远不止在某些框中键入内容)< / p>

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

fn main() {
    let test_num = SomeNum { num: 16 };
    let oveloadedNum = test_num > 10; // works

    let arc_num = Arc::new(test_num);
    let overloadedArc = *arc_num > 10;

    let arc_num_clone = Arc::clone(&arc_num);
    let overloadedArcClone = *arc_num_clone > 10;
}