Nativescript - Android TabView 后退按钮自定义导航

Nativescript - Android TabView back button custom navigation

在 Nativescript 应用程序中,当用户单击 material/soft 后退按钮时,我需要为 Android 实现自定义导航方案。

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

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

今天,由于 Teams 选项卡出口的导航历史记录为空且根出口的导航历史记录为空,应用程序关闭。如果我在 return 进入“玩家”选项卡后点击后退按钮并且“玩家”选项卡的导航历史记录为空,我希望它能关闭。

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

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

在你的 tabs.component.html

<TabView (selectedIndexChanged)="onSelectedIndexChanged($event)" [(ngModel)]="selectedTabIndex" width="100%">

在你的 tabs.component.ts constructor( private routerExtension: RouterExtensions, private activeRoute: ActivatedRoute, private _dataService: DataService ) { this.selectedTabIndex = this._dataService.selectedTabIndex; }

onSelectedIndexChanged(args: SelectedIndexChangedEventData) { const tabView = <TabView>args.object; const selectedTabViewItem = tabView.items[args.newIndex]; this._dataService.selectedTabIndex = args.newIndex; }

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

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

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

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

如果this.routerExtension.canGoBack({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute }) return true 我干脆回去: this.routerExtension.back({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute });

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

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

感谢您的帮助