From 5148bbcbd08f0d2f14bdd388d15ac6a9155beaf4 Mon Sep 17 00:00:00 2001 From: Ryan Lothian Date: Wed, 30 Nov 2016 04:03:47 +0000 Subject: [PATCH] Merge "Revert "TabLayout + ViewPager improvements"" into nyc-dev GitOrigin-RevId=335da996682889d7eb3ba030dd48eed383726254 PiperOrigin-RevId: 140560722 --- .../support/design/widget/TabLayout.java | 107 +++--------------- 1 file changed, 14 insertions(+), 93 deletions(-) diff --git a/src/android/support/design/widget/TabLayout.java b/src/android/support/design/widget/TabLayout.java index f698bb2b6..9922c9448 100755 --- a/src/android/support/design/widget/TabLayout.java +++ b/src/android/support/design/widget/TabLayout.java @@ -85,6 +85,10 @@ import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING; * * You should set a listener via {@link #setOnTabSelectedListener(OnTabSelectedListener)} to be * notified when any tab's selection state has been changed. + *

+ * If you're using a {@link android.support.v4.view.ViewPager} together + * with this layout, you can use {@link #setupWithViewPager(ViewPager)} to link the two together. + * This layout will be automatically populated from the {@link PagerAdapter}'s page titles.

* *

You can also add items to TabLayout in your layout through the use of {@link TabItem}. * An example usage is like so:

@@ -103,28 +107,6 @@ import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING; * </android.support.design.widget.TabLayout> * * - *

ViewPager integration

- *

- * If you're using a {@link android.support.v4.view.ViewPager} together - * with this layout, you can call {@link #setupWithViewPager(ViewPager)} to link the two together. - * This layout will be automatically populated from the {@link PagerAdapter}'s page titles.

- * - *

- * This view also supports being used as part of a ViewPager's decor, and can be added - * directly to the ViewPager in a layout resource file like so:

- * - *
- * <android.support.v4.view.ViewPager
- *     android:layout_width="match_parent"
- *     android:layout_height="match_parent">
- *
- *     <android.support.design.widget.TabLayout
- *         android:layout_width="match_parent"
- *         android:layout_height="wrap_content"
- *         android:layout_gravity="top" />
- *
- * </android.support.v4.view.ViewPager>
- * 
* * @see Tabs * @@ -269,8 +251,6 @@ public class TabLayout extends HorizontalScrollView { private PagerAdapter mPagerAdapter; private DataSetObserver mPagerAdapterObserver; private TabLayoutOnPageChangeListener mPageChangeListener; - private AdapterChangeListener mAdapterChangeListener; - private boolean mSetupViewPagerImplicitly; // Pool we use as a simple RecyclerBin private final Pools.Pool mTabViewPool = new Pools.SimplePool<>(12); @@ -761,19 +741,9 @@ public class TabLayout extends HorizontalScrollView { * content changes */ public void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh) { - setupWithViewPager(viewPager, autoRefresh, false); - } - - private void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh, - boolean implicitSetup) { - if (mViewPager != null) { + if (mViewPager != null && mPageChangeListener != null) { // If we've already been setup with a ViewPager, remove us from it - if (mPageChangeListener != null) { - mViewPager.removeOnPageChangeListener(mPageChangeListener); - } - if (mAdapterChangeListener != null) { - mViewPager.removeOnAdapterChangeListener(mAdapterChangeListener); - } + mViewPager.removeOnPageChangeListener(mPageChangeListener); } if (mCurrentVpSelectedListener != null) { @@ -783,6 +753,11 @@ public class TabLayout extends HorizontalScrollView { } if (viewPager != null) { + final PagerAdapter adapter = viewPager.getAdapter(); + if (adapter == null) { + throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set"); + } + mViewPager = viewPager; // Add our custom OnPageChangeListener to the ViewPager @@ -796,19 +771,9 @@ public class TabLayout extends HorizontalScrollView { mCurrentVpSelectedListener = new ViewPagerOnTabSelectedListener(viewPager); addOnTabSelectedListener(mCurrentVpSelectedListener); - final PagerAdapter adapter = viewPager.getAdapter(); - if (adapter != null) { - // Now we'll populate ourselves from the pager adapter, adding an observer if - // autoRefresh is enabled - setPagerAdapter(adapter, autoRefresh); - } - - // Add a listener so that we're notified of any adapter changes - if (mAdapterChangeListener == null) { - mAdapterChangeListener = new AdapterChangeListener(); - } - mAdapterChangeListener.setAutoRefresh(autoRefresh); - viewPager.addOnAdapterChangeListener(mAdapterChangeListener); + // Now we'll populate ourselves from the pager adapter, adding an observer is + // autoRefresh is enabled + setPagerAdapter(adapter, autoRefresh); // Now update the scroll position to match the ViewPager's current item setScrollPosition(viewPager.getCurrentItem(), 0f, true); @@ -818,8 +783,6 @@ public class TabLayout extends HorizontalScrollView { mViewPager = null; setPagerAdapter(null, false); } - - mSetupViewPagerImplicitly = implicitSetup; } /** @@ -838,33 +801,6 @@ public class TabLayout extends HorizontalScrollView { return getTabScrollRange() > 0; } - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (mViewPager == null) { - // If we don't have a ViewPager already, check if our parent is a ViewPager to - // setup with it automatically - final ViewParent vp = getParent(); - if (vp instanceof ViewPager) { - // If we have a ViewPager parent and we've been added as part of its decor, let's - // assume that we should automatically setup to display any titles - setupWithViewPager((ViewPager) vp, true, true); - } - } - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - - if (mSetupViewPagerImplicitly) { - // If we've been setup with a ViewPager implicitly, let's clear out any listeners, etc - setupWithViewPager(null); - mSetupViewPagerImplicitly = false; - } - } - private int getTabScrollRange() { return Math.max(0, mTabStrip.getWidth() - getWidth() - getPaddingLeft() - getPaddingRight()); @@ -2175,19 +2111,4 @@ public class TabLayout extends HorizontalScrollView { } } - private class AdapterChangeListener implements ViewPager.OnAdapterChangeListener { - private boolean mAutoRefresh; - - @Override - public void onAdapterChanged(@NonNull ViewPager viewPager, - @Nullable PagerAdapter oldAdapter, @Nullable PagerAdapter newAdapter) { - if (mViewPager == viewPager) { - setPagerAdapter(newAdapter, mAutoRefresh); - } - } - - void setAutoRefresh(boolean autoRefresh) { - mAutoRefresh = autoRefresh; - } - } }