From 97a2af27f94b01fab7b1252a4f5d7a2b5025c623 Mon Sep 17 00:00:00 2001 From: Alexander Djenkov Date: Wed, 3 Jul 2019 22:32:16 +0300 Subject: [PATCH] fix(tabs): current TabContentItem index not set (#7441) --- e2e/nested-frame-navigation/e2e/screen.ts | 8 ++++---- .../tab-content-item/tab-content-item.android.ts | 8 +++++++- tns-core-modules/ui/tabs/tabs.android.ts | 12 +++++++++--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/e2e/nested-frame-navigation/e2e/screen.ts b/e2e/nested-frame-navigation/e2e/screen.ts index 3a1bcbe4e..f847b3273 100644 --- a/e2e/nested-frame-navigation/e2e/screen.ts +++ b/e2e/nested-frame-navigation/e2e/screen.ts @@ -6,10 +6,10 @@ const layoutWithMultiFrame = "Layout w/ multi frame"; const pageWithFrame = "Page w/ frame"; const pageWithFrameNonDefaultTransition = "Frame to NestedFrame (non-default transition)"; const pageWithMultiFrame = "Page w/ multi frame"; -const pageTabTopWithFrames = "Page w/ tabs (top)"; -const pageTabBottomWithFrames = "Page w/ tabs (bottom)"; -const tabTopRootWithFrames = "Root tabs (top)"; -const tabBottomRootWithFrames = "Root tabs (bottom)"; +const pageTabTopWithFrames = "Page w/ tabview (top)"; +const pageTabBottomWithFrames = "Page w/ tabview (bottom)"; +const tabTopRootWithFrames = "Root tabview (top)"; +const tabBottomRootWithFrames = "Root tabview (bottom)"; const layoutHome = "layout home page"; const layoutHomeSecondary = "layout home secondary page"; const frameHome = "frame home page"; diff --git a/tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item.android.ts b/tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item.android.ts index 50ad820f3..697325b5b 100644 --- a/tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item.android.ts +++ b/tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item.android.ts @@ -3,7 +3,8 @@ import { TabContentItem as TabContentItemDefinition } from "."; import { TabNavigationBase } from "../tab-navigation-base"; // Requires -import { TabContentItemBase } from "./tab-content-item-common"; +import { TabContentItemBase, traceCategory } from "./tab-content-item-common"; +import { traceEnabled, traceWrite, traceMessageType } from "../../core/view"; export * from "./tab-content-item-common"; @@ -49,6 +50,11 @@ export class TabContentItem extends TabContentItemBase { const tabView = this.parent; let tabFragment = null; const fragmentManager = tabView._getFragmentManager(); + + if (typeof this.index === "undefined") { + traceWrite(`Current TabContentItem index is not set`, traceCategory, traceMessageType.error); + } + for (let fragment of (>fragmentManager.getFragments().toArray())) { if (fragment.index === this.index) { tabFragment = fragment; diff --git a/tns-core-modules/ui/tabs/tabs.android.ts b/tns-core-modules/ui/tabs/tabs.android.ts index d521b0b47..215acf070 100644 --- a/tns-core-modules/ui/tabs/tabs.android.ts +++ b/tns-core-modules/ui/tabs/tabs.android.ts @@ -229,7 +229,7 @@ function initializeNativeClasses() { } } } - + PagerAdapter = FragmentPagerAdapter; } @@ -451,7 +451,7 @@ export class Tabs extends TabsBase { public _onRootViewReset(): void { super._onRootViewReset(); - + // call this AFTER the super call to ensure descendants apply their rootview-reset logic first // i.e. in a scenario with tab frames let the frames cleanup their fragments first, and then // cleanup the tab fragments to avoid @@ -508,6 +508,13 @@ export class Tabs extends TabsBase { private setItems(items: Array) { if (this.shouldUpdateAdapter(items)) { (this._pagerAdapter).items = items; + + if (items && items.length) { + items.forEach((item: TabContentItem, i) => { + (item).index = i; + }); + } + this._pagerAdapter.notifyDataSetChanged(); } } @@ -523,7 +530,6 @@ export class Tabs extends TabsBase { const tabItems = new Array(); items.forEach((item: TabStripItem, i, arr) => { const tabItemSpec = createTabItemSpec(item); - (item).index = i; (item).tabItemSpec = tabItemSpec; tabItems.push(tabItemSpec); });