@@ -71,6 +71,7 @@ public class SliderView extends FrameLayout
71
71
private InfinitePagerAdapter mInfinitePagerAdapter ;
72
72
private boolean mPausedSliding = false ;
73
73
private OnSliderPageListener mPageListener ;
74
+ private boolean mIsInfiniteAdapter = true ;
74
75
75
76
/*Constructor*/
76
77
public SliderView (Context context ) {
@@ -201,6 +202,24 @@ public void setSliderAdapter(@NonNull SliderViewAdapter pagerAdapter) {
201
202
mPagerIndicator .setDynamicCount (true );
202
203
}
203
204
205
+ /**
206
+ * @param pagerAdapter Set a SliderAdapter that will supply views
207
+ * for this slider as needed.
208
+ */
209
+ public void setSliderAdapter (@ NonNull SliderViewAdapter pagerAdapter , boolean infiniteAdapter ) {
210
+ this .mIsInfiniteAdapter = infiniteAdapter ;
211
+ if (!infiniteAdapter ) {
212
+ this .mPagerAdapter = pagerAdapter ;
213
+ //registerAdapterDataObserver();
214
+ mSliderPager .setAdapter (pagerAdapter );
215
+ //setup with indicator
216
+ mPagerIndicator .setCount (getAdapterItemsCount ());
217
+ mPagerIndicator .setDynamicCount (true );
218
+ } else {
219
+ setSliderAdapter (pagerAdapter );
220
+ }
221
+ }
222
+
204
223
/**
205
224
* @return Sliders Pager
206
225
*/
@@ -604,7 +623,7 @@ public int getIndicatorUnselectedColor() {
604
623
/**
605
624
* This method handles sliding behaviors
606
625
* which passed into {@link #SliderView#mHandler}
607
- *
626
+ * <p>
608
627
* see {@link #SliderView#startAutoCycle()}
609
628
*/
610
629
@ Override
@@ -643,11 +662,35 @@ public void slideToNextPosition() {
643
662
}
644
663
}
645
664
665
+
666
+ public void slideToPreviousPosition () {
667
+
668
+ int currentPosition = mSliderPager .getCurrentItem ();
669
+ int adapterItemsCount = getAdapterItemsCount ();
670
+
671
+ if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_BACK_AND_FORTH && adapterItemsCount > 1 ) {
672
+ if (currentPosition % (adapterItemsCount - 1 ) == 0 ) {
673
+ mFlagBackAndForth = !mFlagBackAndForth ;
674
+ }
675
+ if (mFlagBackAndForth ) {
676
+ mSliderPager .setCurrentItem (--currentPosition , true );
677
+ } else {
678
+ mSliderPager .setCurrentItem (++currentPosition , true );
679
+ }
680
+ } else if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_LEFT ) {
681
+ mSliderPager .setCurrentItem (++currentPosition , true );
682
+ } else {
683
+ mSliderPager .setCurrentItem (--currentPosition , true );
684
+ }
685
+ }
686
+
646
687
//sync infinite pager adapter with real one
647
688
@ Override
648
689
public void dataSetChanged () {
649
- mInfinitePagerAdapter .notifyDataSetChanged ();
650
- mSliderPager .setCurrentItem ((getAdapterItemsCount () - 1 ) * (InfinitePagerAdapter .INFINITE_SCROLL_LIMIT / 2 ), false );
690
+ if (mIsInfiniteAdapter ) {
691
+ mInfinitePagerAdapter .notifyDataSetChanged ();
692
+ mSliderPager .setCurrentItem ((getAdapterItemsCount () - 1 ) * (InfinitePagerAdapter .INFINITE_SCROLL_LIMIT / 2 ), false );
693
+ }
651
694
}
652
695
653
696
@ Override
0 commit comments