From 1a6dc899d2c49f6e6514df60a266c76f02909917 Mon Sep 17 00:00:00 2001 From: hea0ven Date: Wed, 3 Jun 2020 13:42:20 +0800 Subject: [PATCH] add DataSetObserver callback --- .../smarttablayout/SmartTabLayout.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/ogaclejapan/smarttablayout/SmartTabLayout.java b/library/src/main/java/com/ogaclejapan/smarttablayout/SmartTabLayout.java index 994733c..7a9a955 100755 --- a/library/src/main/java/com/ogaclejapan/smarttablayout/SmartTabLayout.java +++ b/library/src/main/java/com/ogaclejapan/smarttablayout/SmartTabLayout.java @@ -19,6 +19,7 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; +import android.database.DataSetObserver; import android.graphics.Typeface; import android.os.Build; import android.util.AttributeSet; @@ -85,6 +86,7 @@ public class SmartTabLayout extends HorizontalScrollView { private TabProvider tabProvider; private InternalTabClickListener internalTabClickListener; private OnTabClickListener onTabClickListener; + private DataSetObserver mDataSetObserver; private boolean distributeEvenly; public SmartTabLayout(Context context) { @@ -320,11 +322,16 @@ public void setCustomTabView(TabProvider provider) { * (number of tabs and tab titles) does not change after this call has been made. */ public void setViewPager(ViewPager viewPager) { - tabStrip.removeAllViews(); - this.viewPager = viewPager; if (viewPager != null && viewPager.getAdapter() != null) { viewPager.addOnPageChangeListener(new InternalViewPagerListener()); + + if(mDataSetObserver !=null) + viewPager.getAdapter().unregisterDataSetObserver(mDataSetObserver); + if(mDataSetObserver == null){ + mDataSetObserver = new TabDataSetObserver(); + } + viewPager.getAdapter().registerDataSetObserver(mDataSetObserver); populateTabStrip(); } } @@ -382,6 +389,8 @@ protected TextView createDefaultTabView(CharSequence title) { } private void populateTabStrip() { + tabStrip.removeAllViews(); + final PagerAdapter adapter = viewPager.getAdapter(); for (int i = 0; i < adapter.getCount(); i++) { @@ -550,6 +559,23 @@ public interface TabProvider { } + /** + * When adapter data is change,callback invoke + * {@link android.database.DataSetObservable} + */ + private class TabDataSetObserver extends DataSetObserver { + + @Override + public void onChanged() { + populateTabStrip(); + } + + @Override + public void onInvalidated() { + populateTabStrip(); + } + } + private static class SimpleTabProvider implements TabProvider { private final LayoutInflater inflater;