首页 > 解决方案 > Nativescript - Android TabView 后退按钮自定义导航

问题描述

在 Nativescript 应用程序中,当用户单击材料/软后退按钮时,我需要为 Android 实现自定义导航场景。

为简单起见,从登录标签模板(https://github.com/ADjenkov/login-tabs-ng)开始,我想实现一个导航,如 Instagram、Facebook、WhatsApp、Pinterest 等等......

这是登录选项卡模板的示例,当我从“球员”选项卡导航到“团队”选项卡,然后点击返回按钮时,我想返回“球员”选项卡(在我留在此选项卡中的页面上)。

今天,由于 Teams 选项卡出口的导航历史记录为空,而根出口的导航历史记录为空,应用程序已关闭。如果我在返回“球员”选项卡后点击后退按钮并且“球员”选项卡的导航历史记录为空,我希望它关闭。

我希望它很清楚,如果不是这样,请告诉我。有没有办法实现这种行为?

标签: nativescripttabviewnativescript-angularrouter-outlet

解决方案


最后,我实施了一个受@Manoj 响应启发的解决方案。

我听activityBackPressed event并设置args.cancel = true以防止默认行为。

在每次选项卡更改时,我都会保存以前访问过的选项卡。然后在每次activityBackPressed event我检查当前插座是否可以返回this.routerExtension.canGoBack({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute })

如果不是,如果访问的选项卡列表不为空,我会以编程方式返回上一个选项卡。如果访问的选项卡列表为空,我设置args.cancel = false为退出应用程序。

如果this.routerExtension.canGoBack({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute })返回 true,我只需返回:this.routerExtension.back({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute });

注意:当应用程序进入后台时,您必须删除监听器,否则您将有多个监听器(一个通过恢复):

application.on(application.exitEvent, (args) => {
            if (args.android) {
                application.android.off(application.AndroidApplication.activityBackPressedEvent);
            }
        });

谢谢你的帮助


推荐阅读