Nativescript-Android选项卡视图后退按钮自定义导航

Nativescript-Android选项卡视图后退按钮自定义导航,nativescript,tabview,nativescript-angular,router-outlet,Nativescript,Tabview,Nativescript Angular,Router Outlet,在Nativescript应用程序中,当用户单击material/soft back按钮时,我需要为Android实现一个自定义导航场景 为了简单起见,从login tabs template()开始,我想实现一个导航,比如Instagram、Facebook、WhatsApp、Pinterest等等 这就是登录选项卡模板的示例,当我从“玩家”选项卡导航到“团队”选项卡,然后点击“后退”按钮时,我想返回到“玩家”选项卡(在我在该选项卡中留下的页面上) 今天,由于团队选项卡出口的导航历史记录为空,

在Nativescript应用程序中,当用户单击material/soft back按钮时,我需要为Android实现一个自定义导航场景

为了简单起见,从login tabs template()开始,我想实现一个导航,比如Instagram、Facebook、WhatsApp、Pinterest等等

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

今天,由于团队选项卡出口的导航历史记录为空,而根出口的导航历史记录为空,因此应用程序将关闭。如果在返回到“玩家”选项卡后点击“后退”按钮,并且“玩家”选项卡的导航历史记录为空,我希望它关闭

我希望这是清楚的,如果不是这样,告诉我。
是否有办法实现此行为?

您需要将所选选项卡保存在data.service中,当用户返回到tabs.component.html时,可以使用selectedIndex。在这种情况下,您也可以跳过收听activityBackPressed

在tabs.component.html中

在您的tabs.component.ts中
构造函数(
专用路由扩展:路由扩展,
专用activeRoute:ActivatedRoute,
专用(数据服务:数据服务){
this.selectedTabIndex=此。\u dataService.selectedTabIndex;
}

onSelectedIndexChanged(参数:SelectedIndexChangedEventData){
const tabView=args.object;
const selectedTabViewItem=tabView.items[args.newIndex];
这是.\u dataService.selectedTabIndex=args.newIndex;

}

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

我监听
activityBackPressed事件
并设置
args.cancel=true
以防止默认行为

每次更改选项卡时,我都会保存以前访问过的选项卡。然后,在每次
activityBackPressed事件中
我检查当前插座是否可以使用
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})

注意:当应用程序转到后台时,您必须删除侦听器,否则您将有多个侦听器(一个通过resume):


感谢您的帮助

当用户在团队选项卡上时,您必须收听事件并设置
args.cancel=true
(通过验证选项卡视图上的
selectedIndex
),然后通过url导航到玩家选项卡。您好@Manoj,谢谢您的快速回复。实际上,对于这个简单的例子,它是有效的,但是如果有两个以上的选项卡,我怎么知道用户以前在哪个选项卡上?换句话说,是否存在“全局”浏览历史记录,或者每次用户出现在选项卡上时我都必须手动存储此历史记录?@Manoj要完成:通过url导航到“玩家”选项卡,我将丢失“玩家”选项卡的当前导航历史记录。如果用户了解某个玩家的详细信息,他将返回到玩家列表,而不是进入他所在的页面,这可能会起作用,但我已经实现了下面描述的另一个解决方案。谢谢你的帮助
application.on(application.exitEvent, (args) => {
            if (args.android) {
                application.android.off(application.AndroidApplication.activityBackPressedEvent);
            }
        });