protected void handleOnTabSelected(TabLayout.Tab tab) { if (mDuringSetTabsFromPagerAdapter) { return; } mViewPager.setCurrentItem(tab.getPosition()); cancelPendingUpdateScrollPosition(); }
protected void handleOnDataSetChanged() { cancelPendingUpdateScrollPosition(); cancelPendingSetTabsFromPagerAdapter(); if (mSetTabsFromPagerAdapterRunnable == null) { mSetTabsFromPagerAdapterRunnable = new Runnable() { @Override public void run() { setTabsFromPagerAdapter(mTabLayout, mViewPager.getAdapter(), mViewPager.getCurrentItem()); } }; } mTabLayout.post(mSetTabsFromPagerAdapterRunnable); }
/** * Unregister internal listener objects, release object references, etc. * This method should be called in order to avoid memory leaks. */ public void release() { cancelPendingAdjustTabMode(); cancelPendingSetTabsFromPagerAdapter(); cancelPendingUpdateScrollPosition(); if (mInternalOnAdapterChangeListener != null) { mViewPager.removeOnAdapterChangeListener(mInternalOnAdapterChangeListener); mInternalOnAdapterChangeListener = null; } if (mInternalDataSetObserver != null) { mViewPager.getAdapter().unregisterDataSetObserver(mInternalDataSetObserver); mInternalDataSetObserver = null; } if (mInternalOnTabSelectedListener != null) { mTabLayout.removeOnTabSelectedListener(mInternalOnTabSelectedListener); mInternalOnTabSelectedListener = null; } if (mInternalTabLayoutOnPageChangeListener != null) { mViewPager.removeOnPageChangeListener(mInternalTabLayoutOnPageChangeListener); mInternalTabLayoutOnPageChangeListener = null; } mViewPager = null; mTabLayout = null; }
protected void adjustTabModeInternal(@NonNull TabLayout tabLayout, int prevScrollX) { int prevTabMode = tabLayout.getTabMode(); tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER); int newTabMode = determineTabMode(tabLayout); cancelPendingUpdateScrollPosition(); if (newTabMode == TabLayout.MODE_FIXED) { tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); tabLayout.setTabMode(TabLayout.MODE_FIXED); } else { LinearLayout slidingTabStrip = (LinearLayout) tabLayout.getChildAt(0); slidingTabStrip.setGravity(Gravity.CENTER_HORIZONTAL); if (prevTabMode == TabLayout.MODE_SCROLLABLE) { // restore scroll position tabLayout.scrollTo(prevScrollX, 0); } else { // scroll to current selected tab mUpdateScrollPositionRunnable = new Runnable() { @Override public void run() { mUpdateScrollPositionRunnable = null; updateScrollPosition(); } }; mTabLayout.post(mUpdateScrollPositionRunnable); } } }