diff --git a/apps/ui/src/tabs/swipe-disabled-page.ts b/apps/ui/src/tabs/swipe-disabled-page.ts new file mode 100644 index 000000000..9e9b4869f --- /dev/null +++ b/apps/ui/src/tabs/swipe-disabled-page.ts @@ -0,0 +1,15 @@ +import { EventData, Page, Tabs } from '@nativescript/core'; + +export function goToFirst(args: EventData) { + console.log('---> goToFirst'); + const page = (args.object).page; + const tabsNav = page.getViewById('tabs'); + tabsNav.selectedIndex = 0; +} + +export function goToSecond(args: EventData) { + console.log('---> goToSecond'); + const page = (args.object).page; + const tabsNav = page.getViewById('tabs'); + tabsNav.selectedIndex = 1; +} diff --git a/apps/ui/src/tabs/swipe-disabled-page.xml b/apps/ui/src/tabs/swipe-disabled-page.xml index 5799d7393..5d81f4482 100644 --- a/apps/ui/src/tabs/swipe-disabled-page.xml +++ b/apps/ui/src/tabs/swipe-disabled-page.xml @@ -4,7 +4,7 @@ - + diff --git a/apps/ui/src/tabs/tabs-position-page.xml b/apps/ui/src/tabs/tabs-position-page.xml index 914d7755c..0002affc5 100644 --- a/apps/ui/src/tabs/tabs-position-page.xml +++ b/apps/ui/src/tabs/tabs-position-page.xml @@ -4,7 +4,7 @@ - + diff --git a/packages/core/platforms/android/widgets-release.aar b/packages/core/platforms/android/widgets-release.aar index 33aff71ac..30ac9b12e 100644 Binary files a/packages/core/platforms/android/widgets-release.aar and b/packages/core/platforms/android/widgets-release.aar differ diff --git a/packages/core/ui/tabs/index.android.ts b/packages/core/ui/tabs/index.android.ts index a152df827..842ef66be 100644 --- a/packages/core/ui/tabs/index.android.ts +++ b/packages/core/ui/tabs/index.android.ts @@ -141,6 +141,7 @@ function initializeNativeClasses() { public items: Array; private mCurTransaction: androidx.fragment.app.FragmentTransaction; private mCurrentPrimaryItem: androidx.fragment.app.Fragment; + private mCurrentPosition = -1; constructor(public owner: Tabs) { super(); @@ -238,9 +239,27 @@ function initializeNativeClasses() { } this.mCurrentPrimaryItem = fragment; - this.owner.selectedIndex = position; + const previousPosition = this.mCurrentPosition; + this.mCurrentPosition = position; const tab = this.owner; + tab.selectedIndex = position; + + // Update tabstrip items + if (position != previousPosition) { + const tabStripItems = tab.tabStrip && tab.tabStrip.items; + + if (position >= 0 && tabStripItems && tabStripItems[position]) { + tabStripItems[position]._emit(TabStripItem.selectEvent); + tab._setItemColor(tabStripItems[position]); + } + + if (previousPosition >= 0 && tabStripItems && tabStripItems[previousPosition]) { + tabStripItems[previousPosition]._emit(TabStripItem.unselectEvent); + tab._setItemColor(tabStripItems[previousPosition]); + } + } + const tabItems = tab.items; const newTabItem = tabItems ? tabItems[position] : null; @@ -290,25 +309,6 @@ function initializeNativeClasses() { return global.__native(this); } - public onSelectedPositionChange(position: number, prevPosition: number): void { - const owner = this.owner; - if (!owner) { - return; - } - - const tabStripItems = owner.tabStrip && owner.tabStrip.items; - - if (position >= 0 && tabStripItems && tabStripItems[position]) { - tabStripItems[position]._emit(TabStripItem.selectEvent); - owner._setItemColor(tabStripItems[position]); - } - - if (prevPosition >= 0 && tabStripItems && tabStripItems[prevPosition]) { - tabStripItems[prevPosition]._emit(TabStripItem.unselectEvent); - owner._setItemColor(tabStripItems[prevPosition]); - } - } - public onTap(position: number): boolean { const owner = this.owner; if (!owner) { @@ -952,11 +952,9 @@ export class Tabs extends TabsBase { } [selectedIndexProperty.setNative](value: number) { - // TODO - // if (Trace.isEnabled()) { - // Trace.write("TabView this._viewPager.setCurrentItem(" + value + ", " + smoothScroll + ");", traceCategory); - // } - this._viewPager.setCurrentItem(value, this.animationEnabled); + if (this._viewPager.getCurrentItem() != value) { + this._viewPager.setCurrentItem(value); + } } [itemsProperty.getDefault](): TabContentItem[] { diff --git a/packages/core/ui/tabs/tabs-common.ts b/packages/core/ui/tabs/tabs-common.ts index f4a4b9933..efca84bbe 100644 --- a/packages/core/ui/tabs/tabs-common.ts +++ b/packages/core/ui/tabs/tabs-common.ts @@ -12,7 +12,7 @@ export * from '../tab-navigation-base/tab-navigation-base'; export * from '../tab-navigation-base/tab-strip'; export * from '../tab-navigation-base/tab-strip-item'; -export const traceCategory = 'TabView'; +export const traceCategory = 'Tabs'; @CSSType('Tabs') export class TabsBase extends TabNavigationBase implements TabsDefinition { diff --git a/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabViewPager.java b/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabViewPager.java index aa8ecf5ae..c6c5da37c 100644 --- a/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabViewPager.java +++ b/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabViewPager.java @@ -56,7 +56,7 @@ public class TabViewPager extends ViewPager { @Override public void setCurrentItem(int item) { - boolean smoothScroll = this.animationEnabled && this.swipePageEnabled; + boolean smoothScroll = this.animationEnabled; super.setCurrentItem(item, smoothScroll); } } diff --git a/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabsBar.java b/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabsBar.java index 3f9e53dbe..9d2404241 100644 --- a/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabsBar.java +++ b/packages/ui-mobile-base/android/widgets/src/main/java/org/nativescript/widgets/TabsBar.java @@ -317,10 +317,6 @@ public class TabsBar extends HorizontalScrollView { return true; } - public void onSelectedPositionChange(int position, int prevPosition) { - // to be overridden in JS - } - private void populateTabStrip() { final PagerAdapter adapter = mViewPager.getAdapter(); final OnClickListener tabClickListener = new TabClickListener(); @@ -394,12 +390,6 @@ public class TabsBar extends HorizontalScrollView { return; } - int prevPosition = mTabStrip.getSelectedPosition(); - - if (prevPosition != position) { - onSelectedPositionChange(position, prevPosition); - } - mTabStrip.onTabsViewPagerPageChanged(position, positionOffset); View selectedTitle = mTabStrip.getChildAt(position);