Browse Source

Optimize refreshData method

zhpanvip 5 years ago
parent
commit
d8428ee29f

+ 93 - 87
README.md

@@ -49,7 +49,7 @@ The Indicator library was split from BannerViewPager,the new repo is [ViewPagerI
 
 #### (1)setIndicatorStyle and setIndicatorSlideMode
 
-BannerViewPager supports three Indicator Styles and three Indicator Slide mode now. 
+BannerViewPager supports three Indicator Styles and five Indicator Slide mode now.
 
 [Sample Click Here](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java)
 
@@ -135,7 +135,7 @@ It's also support to custom indicator style,just need extends BaseIndicatorView
 
 ## Useage
 
-Since Viewpager2 does not support android support library, So since the version 3.0 is no longer supports android support library too. If you are still using android support, please use [BannerViewPager v2.x](https://github.com/zhpanvip/BannerViewPager/tree/v_2.x)
+Because Viewpager2 is not supported in android.support library, So BannerViewPager V3.0 is no longer support android support.library. If you are still using android.support library, please use [BannerViewPager v2.x](https://github.com/zhpanvip/BannerViewPager/tree/v_2.x)
 
 ### 1.Gradle dependency
 
@@ -247,92 +247,98 @@ public class HomeAdapter extends BaseBannerAdapter<BannerData, NetViewHolder> {
 
 ### 5.Use in Activity or Fragment:
 
-  If data has fetched when create BannerViewPager,you can call create(List) method with parameter.
- #### Java code
-```
-    private BannerViewPager<CustomBean, NetViewHolder> mViewPager;
-    ...
-	private void setupViewPager() {
-             mBannerViewPager = findViewById(R.id.banner_view);
-             mViewPager
-                      .setAutoPlay(true)
-                      .setScrollDuration(800)
-                      .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
-                      .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                      .setIndicatorSliderWidth(getResources().getDimensionPixelOffset(R.dimen.dp_4), getResources().getDimensionPixelOffset(R.dimen.dp_10))
-                      .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                      .setOrientation(ViewPager2.ORIENTATION_VERTICAL)
-                      .setInterval(2000)
-                      .setAdapter(new HomeAdapter())
-                      .registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
-                          @Override
-                          public void onPageSelected(int position) {
-                              BannerUtils.log("position:$position");
-                          }
-                      }).create(getPicList(4));
-        }
-```
-#### Kotlin Code
-
-```
-    private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
-    ...
-
-    private fun setupViewPager() {
-            mViewPager = findViewById(R.id.banner_view)
-            mViewPager.apply {
-                adapter = HomeAdapter()
-                setAutoPlay(true)
-                setIndicatorStyle(IndicatorStyle.ROUND_RECT)
-                setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
-                setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
-                setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
-                setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
-                        ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))
-                registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
-                                     override fun onPageSelected(position: Int) {
-                                         BannerUtils.log("position:$position")
-                                     }
-                                 })
-            }.create(data)
-        }
-
-```
+  You can call create() method with no parameter,If fetching data asynchronously(for example,The data is from remote server or database):
 
-If there is no data while create BannerViewPager(for example,The data is from remote server),you can call create() method with no parameters:
-
-```
-    private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
-    ...
-
-    private fun setupViewPager() {
-            mViewPager = findViewById(R.id.banner_view)
-            mViewPager.apply {
-                adapter = HomeAdapter()
-                setAutoPlay(true)
-                setIndicatorStyle(IndicatorStyle.ROUND_RECT)
-                setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
-                setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
-                setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
-                setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
-                        ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))
-                registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
-                                     override fun onPageSelected(position: Int) {
-                                         BannerUtils.log("position:$position")
-                                     }
-                                 })
-            }.create()
-        }
-
-```
-
-Then,while you get data successfully,just need call refreData() method to refresh:
+ #### Java code
 
-```
-    mViewPager.refreshData(data)
-```
+  ```
+      private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
+      ...
+
+      private fun setupViewPager() {
+              mViewPager = findViewById(R.id.banner_view)
+              mViewPager.apply {
+                  adapter = HomeAdapter()
+                  setAutoPlay(true)
+                  setIndicatorStyle(IndicatorStyle.ROUND_RECT)
+                  setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
+                  setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
+                  setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                  setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
+                  setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
+                          ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))
+                  registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
+                                       override fun onPageSelected(position: Int) {
+                                           BannerUtils.log("position:$position")
+                                       }
+                                   })
+              }.create()
+          }
+
+  ```
+
+  #### Kotlin Code
+
+  ```
+      private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
+      ...
+
+      private fun setupViewPager() {
+              mViewPager = findViewById(R.id.banner_view)
+              mViewPager.apply {
+                  adapter = HomeAdapter()
+                  setAutoPlay(true)
+                  setIndicatorStyle(IndicatorStyle.ROUND_RECT)
+                  setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
+                  setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
+                  setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                  setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
+                  setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
+                          ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))
+                  registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
+                                       override fun onPageSelected(position: Int) {
+                                           BannerUtils.log("position:$position")
+                                       }
+                                   })
+              }.create()
+          }
+
+  ```
+
+  While fetch data successfully,just need call refreData() method to refresh:
+
+  ```
+      mViewPager.refreshData(data)
+  ```
+
+
+If fetching data synchronously,you can call create(List<T>) method with parameters.
+
+ ```
+      private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
+      ...
+
+      private fun setupViewPager() {
+              mViewPager = findViewById(R.id.banner_view)
+              mViewPager.apply {
+                  adapter = HomeAdapter()
+                  setAutoPlay(true)
+                  setIndicatorStyle(IndicatorStyle.ROUND_RECT)
+                  setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
+                  setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
+                  setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                  setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
+                  setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
+                          ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))
+                  registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
+                                       override fun onPageSelected(position: Int) {
+                                           BannerUtils.log("position:$position")
+                                       }
+                                   })
+              }.create(data)
+          }
+
+  ```
 
 
 ### 6.startLoop and stopLoop
@@ -357,7 +363,7 @@ Recommend call stopLoop in onPause() and startLoop in onResume() to improve perf
     }
 ```
 
-### 7.Custom IndicatorView
+### 7.Advanced Features---Custom IndicatorView
 
 The example will implement an custom IndicatorView as the follow gif.
 

+ 34 - 31
README_CN.md

@@ -50,7 +50,7 @@
 
 #### (1)IndicatorStyle 与 IndicatorSlideMode
 
-BannerViewPager目前已支持三种IndicatorViewStyle,以及种IndicatorSlideMode,分别如下:
+BannerViewPager目前已支持三种IndicatorViewStyle,以及种IndicatorSlideMode,分别如下:
 
 | 属性 | CIRCLE | DASH | ROUND_RECT |
 |--|--|--|--|
@@ -245,35 +245,9 @@ public class HomeAdapter extends BaseBannerAdapter<BannerData, NetViewHolder> {
 
 ### 5.BannerViewPager参数配置
 
-#### Java code
-```
-    private BannerViewPager<CustomBean, NetViewHolder> mViewPager;
-    ...
-	private void setupViewPager() {
-             mViewPager = findViewById(R.id.banner_view);
-             mViewPager
-                       .setAutoPlay(true)
-                       .setScrollDuration(800)
-                       .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
-                       .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                       .setIndicatorSliderWidth(getResources().getDimensionPixelOffset(R.dimen.dp_4), getResources().getDimensionPixelOffset(R.dimen.dp_10))
-                       .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                       .setOrientation(ViewPager2.ORIENTATION_VERTICAL)
-                       .setInterval(2000)
-                       .setAdapter(new HomeAdapter())
-                       .registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
-                           @Override
-                           public void onPageSelected(int position) {
-                               super.onPageSelected(position);
-                               BannerData bannerData = mViewPagerHorizontal.getData().get(position);
-                               mTvTitle.setText(bannerData.getTitle());
-                           }
-                       }).create(getPicList(4));
-        }
-```
-
-#### Kotlin Code
+如果是异步获取数据(例如从服务器或数据库获取数据),可以调用不带参数的create()方法:
 
+#### Java code
 ```
     private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
     ...
@@ -295,12 +269,12 @@ public class HomeAdapter extends BaseBannerAdapter<BannerData, NetViewHolder> {
                         BannerUtils.log("position:$position")
                     }
                 })
-            }.create(data)
+            }.create()
         }
 
 ```
 
-如果在创建BannerViewPager时不能拿到数据(例如数据是来自远程服务器),则可以调用不带参数的create()方法。代码如下:
+#### Kotlin Code
 
 ```
     private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
@@ -334,6 +308,35 @@ public class HomeAdapter extends BaseBannerAdapter<BannerData, NetViewHolder> {
     mViewPager.refreshData(data)
 ```
 
+如果是同步获取数据,则可以调用带参数的create方法,如下:
+
+```
+    private BannerViewPager<CustomBean, NetViewHolder> mViewPager;
+    ...
+	private void setupViewPager() {
+             mViewPager = findViewById(R.id.banner_view);
+             mViewPager
+                       .setAutoPlay(true)
+                       .setScrollDuration(800)
+                       .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
+                       .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_4))
+                       .setIndicatorSliderWidth(getResources().getDimensionPixelOffset(R.dimen.dp_4), getResources().getDimensionPixelOffset(R.dimen.dp_10))
+                       .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
+                       .setOrientation(ViewPager2.ORIENTATION_VERTICAL)
+                       .setInterval(2000)
+                       .setAdapter(new HomeAdapter())
+                       .registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+                           @Override
+                           public void onPageSelected(int position) {
+                               super.onPageSelected(position);
+                               BannerData bannerData = mViewPagerHorizontal.getData().get(position);
+                               mTvTitle.setText(bannerData.getTitle());
+                           }
+                       }).create(getPicList(4));
+        }
+```
+
+
 ### 6.开启与停止轮播
 
 ***2.5.0之后版本无需自行在Activity或Fragment中管理stopLoop和startLoop方法,但这两个方法依旧保留对外开放***

+ 6 - 9
app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java

@@ -67,8 +67,10 @@ public class IndicatorFragment extends BaseFragment {
         mViewPager = view.findViewById(R.id.banner_view);
         mViewPager.setIndicatorSliderGap(BannerUtils.dp2px(6))
                 .setScrollDuration(800)
+                .setIndicatorGravity(IndicatorGravity.CENTER)
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setAdapter(new ImageResourceAdapter(0))
-                .setRoundCorner(BannerUtils.dp2px(6));
+                .setRoundCorner(BannerUtils.dp2px(6)).create();
         initRadioGroup();
     }
 
@@ -116,13 +118,11 @@ public class IndicatorFragment extends BaseFragment {
         int checkedWidth = getResources().getDimensionPixelOffset(R.dimen.dp_10);
         int normalWidth = getNormalWidth();
         mViewPager.setIndicatorStyle(IndicatorStyle.ROUND_RECT)
-                .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSliderGap(BannerUtils.dp2px(4))
                 .setIndicatorSlideMode(mSlideMode)
                 .setIndicatorHeight(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .setIndicatorSliderWidth(normalWidth, checkedWidth).create(getPicList(4));
+                .setIndicatorSliderWidth(normalWidth, checkedWidth).refreshData(getPicList(4));
     }
 
     private void setupCircleIndicator() {
@@ -138,11 +138,9 @@ public class IndicatorFragment extends BaseFragment {
 
         mViewPager.setIndicatorStyle(IndicatorStyle.CIRCLE)
                 .setIndicatorSlideMode(mSlideMode)
-                .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_6))
                 .setIndicatorSliderRadius(normalWidth, checkedWidth)
-                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
-                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color)).create(getPicList(4));
+                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color)).refreshData(getPicList(4));
     }
 
     private void setupDashIndicator() {
@@ -150,12 +148,11 @@ public class IndicatorFragment extends BaseFragment {
         int normalWidth = getNormalWidth();
         mViewPager.setIndicatorStyle(IndicatorStyle.DASH)
                 .setIndicatorHeight(getResources().getDimensionPixelOffset(R.dimen.dp_3))
-                .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSlideMode(mSlideMode)
                 .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_3))
                 .setIndicatorSliderWidth(normalWidth, checkedWidth)
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .create(getPicList(4));
+                .refreshData(getPicList(4));
     }
 
     private int getNormalWidth() {

+ 22 - 40
app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java

@@ -26,7 +26,6 @@ import com.zhpan.indicator.IndicatorView;
 import com.zhpan.indicator.base.IIndicator;
 import com.zhpan.indicator.enums.IndicatorSlideMode;
 
-import java.lang.reflect.Field;
 import java.util.Random;
 
 /**
@@ -88,6 +87,7 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
         mIndicatorView = view.findViewById(R.id.indicator_view);
         view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
         mViewPager.setIndicatorSliderGap(BannerUtils.dp2px(6))
+                .setIndicatorView(mIndicatorView)
                 .setRoundCorner(BannerUtils.dp2px(6))
                 .setOnPageClickListener(position -> {
                     ToastUtils.show("position:" + position);
@@ -96,16 +96,14 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
                 })
                 .setAdapter(new ImageResourceAdapter(0))
                 .setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
-                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color));
+                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color)).create();
         initRadioGroup();
     }
 
 
     private void initRadioGroup() {
-        radioGroupStyle.setVisibility(View.VISIBLE);
         radioGroupStyle.setVisibility(View.VISIBLE);
         radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> {
-            resetBannerViewPager();
             switch (checkedId) {
                 case R.id.rb_indicator_below:
                     setIndicatorBelowOfBanner();
@@ -131,9 +129,28 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
                 .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorVisibility(View.VISIBLE)
                 .setIndicatorGravity(IndicatorGravity.CENTER)
-                .create(getMDrawableList());
+                .refreshData(getMDrawableList());
+    }
+
+    private void setIndicatorBelowOfBanner() {
+        mIndicatorView.setVisibility(View.VISIBLE);
+        mViewPager
+                .setIndicatorVisibility(View.GONE)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                .setIndicatorView(mIndicatorView)
+                .refreshData(getPicList(4));
     }
 
+    private void setupCustomIndicator() {
+        mIndicatorView.setVisibility(View.INVISIBLE);
+        mViewPager.setAutoPlay(true).setCanLoop(true)
+                .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
+                .setIndicatorVisibility(View.VISIBLE)
+                .setIndicatorGravity(IndicatorGravity.END)
+                .setIndicatorView(setupIndicatorView()).refreshData(getPicList(4));
+    }
+
+
     private IIndicator getDrawableIndicator() {
         int dp10 = getResources().getDimensionPixelOffset(R.dimen.dp_10);
         return new DrawableIndicator(getContext())
@@ -150,24 +167,6 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
                 .setIndicatorSize(dp6, dp6, getResources().getDimensionPixelOffset(R.dimen.dp_13), dp6);
     }
 
-    private void setIndicatorBelowOfBanner() {
-        mIndicatorView.setVisibility(View.VISIBLE);
-        mViewPager
-                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
-                .setIndicatorView(mIndicatorView)
-                .create(getPicList(4));
-    }
-
-
-    private void setupCustomIndicator() {
-        mIndicatorView.setVisibility(View.INVISIBLE);
-        mViewPager.setAutoPlay(false).setCanLoop(true)
-                .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
-                .setIndicatorVisibility(View.VISIBLE)
-                .setIndicatorGravity(IndicatorGravity.END)
-                .setIndicatorView(setupIndicatorView()).create(getPicList(4));
-    }
-
     /**
      * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
      */
@@ -188,21 +187,4 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
     public void onClick(View view) {
         startActivity(new Intent(getActivity(), PhotoViewActivity.class));
     }
-
-    /**
-     * 注意:在项目中不需要使用该方法
-     */
-    private void resetBannerViewPager() {
-        try {
-            Field mIndicatorView = BannerViewPager.class.getDeclaredField("mIndicatorView");
-            mIndicatorView.setAccessible(true);
-            mIndicatorView.set(mViewPager, null);
-            Field isCustomIndicator = BannerViewPager.class.getDeclaredField("isCustomIndicator");
-            isCustomIndicator.setAccessible(true);
-            isCustomIndicator.set(mViewPager, false);
-        } catch (IllegalAccessException | NoSuchFieldException e) {
-            e.printStackTrace();
-        }
-    }
-
 }

+ 8 - 12
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -255,7 +255,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
     }
 
     private void handlePosition() {
-        if (mBannerPagerAdapter.getListSize() > 1) {
+        if (mBannerPagerAdapter.getListSize() > 1 && isAutoPlay()) {
             mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
             mHandler.postDelayed(mRunnable, getInterval());
         }
@@ -271,11 +271,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
     }
 
     private void setIndicatorValues(List<T> list) {
-        int indicatorVisibility = mBannerManager.getBannerOptions().getIndicatorVisibility();
-        if (indicatorVisibility == View.GONE || indicatorVisibility == View.INVISIBLE) {
-            return;
-        }
-        mIndicatorLayout.setVisibility(indicatorVisibility);
+        mIndicatorLayout.setVisibility(mBannerManager.getBannerOptions().getIndicatorVisibility());
         BannerOptions bannerOptions = mBannerManager.getBannerOptions();
         bannerOptions.resetIndicatorOptions();
         if (isCustomIndicator && null != mIndicatorView) {
@@ -741,15 +737,15 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
      */
     public void refreshData(List<T> list) {
         if (list != null && mBannerPagerAdapter != null) {
+            stopLoop();
             mBannerPagerAdapter.setData(list);
             mBannerPagerAdapter.notifyDataSetChanged();
             setCurrentItem(getCurrentItem(), false);
-            if (mIndicatorView != null) {
-                IndicatorOptions indicatorOptions = mBannerManager.getBannerOptions().getIndicatorOptions();
-                indicatorOptions.setPageSize(list.size());
-                indicatorOptions.setCurrentPosition(BannerUtils.getRealPosition(isCanLoop(), mViewPager.getCurrentItem(), list.size()));
-                mIndicatorView.notifyDataChanged();
-            }
+            setIndicatorValues(list);
+            mBannerManager.getBannerOptions().getIndicatorOptions()
+                    .setCurrentPosition(BannerUtils.getRealPosition(isCanLoop(),
+                            mViewPager.getCurrentItem(), list.size()));
+            mIndicatorView.notifyDataChanged();
             startLoop();
         }
     }