Jelajahi Sumber

Try to Fix #298 and #252

zhpanvip 2 tahun lalu
induk
melakukan
100c49fdd4

+ 1 - 4
app/src/main/java/com/example/zhpan/banner/fragment/PageFragment.kt

@@ -47,7 +47,7 @@ class PageFragment : BaseFragment() {
                 resources.getDimensionPixelOffset(dimen.dp_4),
                 resources.getDimensionPixelOffset(dimen.dp_5)
             )
-            setOnPageClickListener { _: View, position: Int -> itemClick(position) }
+            setOnPageClickListener ({ _: View, position: Int -> itemClick(position) },true)
             setInterval(5000)
         }
     }
@@ -185,9 +185,6 @@ class PageFragment : BaseFragment() {
     }
 
     private fun itemClick(position: Int) {
-        if (position != mViewPager.currentItem) {
-            mViewPager.setCurrentItem(position, true)
-        }
         ToastUtils.showShort("position:$position")
     }
 

+ 14 - 5
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -77,8 +77,6 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
 
   private boolean isLooping;
 
-  private OnPageClickListener mOnPageClickListener;
-
   private IIndicator mIndicatorView;
 
   private RelativeLayout mIndicatorLayout;
@@ -403,7 +401,6 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
     }
     currentPosition = 0;
     mBannerPagerAdapter.setCanLoop(bannerOptions.isCanLoop());
-    mBannerPagerAdapter.setPageClickListener(mOnPageClickListener);
     mViewPager.setAdapter(mBannerPagerAdapter);
     if (isCanLoopSafely()) {
       mViewPager.setCurrentItem(getOriginalPosition(list.size()), false);
@@ -674,9 +671,21 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
    * @param onPageClickListener item click listener
    */
   public BannerViewPager<T> setOnPageClickListener(OnPageClickListener onPageClickListener) {
-    this.mOnPageClickListener = onPageClickListener;
+    setOnPageClickListener(onPageClickListener, false);
+    return this;
+  }
+
+  public BannerViewPager<T> setOnPageClickListener(OnPageClickListener onPageClickListener,
+      boolean scrollToThisItem) {
     if (mBannerPagerAdapter != null) {
-      mBannerPagerAdapter.setPageClickListener(mOnPageClickListener);
+      mBannerPagerAdapter.setPageClickListener(
+          (clickedView, realPosition, adapterPosition) -> {
+            onPageClickListener.onPageClick(
+                clickedView, realPosition);
+            if (scrollToThisItem) {
+              mViewPager.setCurrentItem(adapterPosition);
+            }
+          });
     }
     return this;
   }

+ 8 - 4
bannerview/src/main/java/com/zhpan/bannerview/BaseBannerAdapter.java

@@ -36,7 +36,7 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
   protected List<T> mList = new ArrayList<>();
   private boolean isCanLoop;
   public static final int MAX_VALUE = 1000;
-  private BannerViewPager.OnPageClickListener mPageClickListener;
+  private PageClickListener mPageClickListener;
 
   @NonNull
   @Override
@@ -48,8 +48,8 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
       int adapterPosition = viewHolder.getAdapterPosition();
       if (mPageClickListener != null && adapterPosition != RecyclerView.NO_POSITION) {
         int realPosition =
-            BannerUtils.getRealPosition(viewHolder.getAdapterPosition(), getListSize());
-        mPageClickListener.onPageClick(clickedView, realPosition);
+            BannerUtils.getRealPosition(adapterPosition, getListSize());
+        mPageClickListener.onPageClick(clickedView, realPosition, adapterPosition);
       }
     });
     return viewHolder;
@@ -91,7 +91,7 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
     isCanLoop = canLoop;
   }
 
-  void setPageClickListener(BannerViewPager.OnPageClickListener pageClickListener) {
+  void setPageClickListener(PageClickListener pageClickListener) {
     mPageClickListener = pageClickListener;
   }
 
@@ -139,4 +139,8 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
    */
   public abstract @LayoutRes
   int getLayoutId(int viewType);
+
+  interface PageClickListener {
+    void onPageClick(View clickedView, int realPosition, int adapterPosition);
+  }
 }