@@ -255,6 +255,11 @@ export class Pager extends PagerBase {
255
255
}
256
256
this . _initAutoPlay ( this . autoPlay ) ;
257
257
}
258
+ if ( this . indicator && this . mObservableArrayInstance && this . mObservableArrayInstance . length ) {
259
+ this . indicator . setCount ( this . mObservableArrayInstance . length ) ;
260
+ this . pagerAdapter . notifyDataSetChanged ( ) ;
261
+ this . scrollToIndexAnimated ( 0 , false ) ;
262
+ }
258
263
} ;
259
264
disposeViewHolderViews ( ) {
260
265
this . enumerateViewHolders ( ( v ) => {
@@ -318,7 +323,7 @@ export class Pager extends PagerBase {
318
323
const indicator = this . indicator ;
319
324
const toDo = ( ) => {
320
325
nativeView . setCurrentItem ( index , false ) ;
321
- indicator . setSelection ( this . selectedIndex , false ) ;
326
+ if ( indicator ) indicator . setSelection ( this . selectedIndex , false ) ;
322
327
} ;
323
328
if ( indicator ) {
324
329
indicator . withoutAnimation ( toDo ) ;
@@ -363,10 +368,13 @@ export class Pager extends PagerBase {
363
368
public scrollToIndexAnimated ( index : number , animate : boolean ) {
364
369
const nativeView = this . nativeViewProtected ;
365
370
if ( nativeView ) {
366
- nativeView . setCurrentItem ( index , animate ) ;
371
+ nativeView . setCurrentItem ( this . pagerAdapter . getIndex ( index ) , animate ) ;
367
372
if ( ! animate ) {
368
373
// without animate we wont go through the delegate
369
374
selectedIndexProperty . nativeValueChange ( this , index ) ;
375
+ if ( this . indicator ) {
376
+ this . indicator . setSelection ( index , false ) ;
377
+ }
370
378
}
371
379
}
372
380
}
@@ -527,9 +535,6 @@ export class Pager extends PagerBase {
527
535
if ( isRightOverScrolled || isLeftOverScrolled ) {
528
536
selectedPosition = position ;
529
537
}
530
- if ( isRightOverScrolled ) {
531
- indicator . setSelection ( selectedPosition ) ;
532
- }
533
538
534
539
const slideToRightSide = selectedPosition === position && positionOffset !== 0 ;
535
540
let selectingPosition ;
@@ -586,7 +591,9 @@ function initPagerChangeCallback() {
586
591
if ( owner . lastEvent === 0 && ! owner . circularMode ) {
587
592
// page changing without scroll so do the indicator etc.
588
593
selectedIndexProperty . nativeValueChange ( owner , position ) ;
589
- owner . indicator ?. setSelection ( position , true ) ;
594
+ if ( owner . indicator ) {
595
+ owner . indicator . setSelection ( position , true ) ;
596
+ }
590
597
}
591
598
592
599
owner . notify ( {
@@ -627,7 +634,10 @@ function initPagerChangeCallback() {
627
634
const selectingPosition = progress [ 0 ] ;
628
635
const selectingProgress = progress [ 1 ] ;
629
636
indicator . setInteractiveAnimation ( true ) ;
630
- indicator . setProgress ( selectingPosition , selectingProgress ) ;
637
+ if ( position < owner . lastIndex ) {
638
+ indicator . setSelection ( position , false ) ;
639
+ indicator . setProgress ( selectingPosition , selectingProgress ) ;
640
+ }
631
641
}
632
642
}
633
643
}
@@ -710,6 +720,7 @@ interface PagerRecyclerAdapter extends androidx.recyclerview.widget.RecyclerView
710
720
new ( owner : WeakRef < Pager > ) : PagerRecyclerAdapter ;
711
721
getPosition ( index : number ) : number ;
712
722
lastIndex ( ) : number ;
723
+ getIndex ( index : number ) : number ;
713
724
}
714
725
// eslint-disable-next-line no-redeclare
715
726
let PagerRecyclerAdapter : PagerRecyclerAdapter ;
@@ -775,7 +786,27 @@ function initPagerRecyclerAdapter() {
775
786
}
776
787
return position ;
777
788
}
778
-
789
+ /**
790
+ *
791
+ * Get the position in the CollectionView from the selected index
792
+ *
793
+ * @param index The position in the collectionView
794
+ * @returns The selected Index ( i.e. the number in the slides as the user would view it).
795
+ */
796
+ getIndex ( index : number ) : number {
797
+ let position = index ;
798
+ const owner = this . owner && this . owner . get ( ) ;
799
+ if ( owner && owner . circularMode ) {
800
+ if ( position === 0 ) {
801
+ position = 1 ;
802
+ } else if ( position === this . firstDummy ( ) ) {
803
+ position = 0 ;
804
+ } else {
805
+ position = position + 1 ;
806
+ }
807
+ }
808
+ return position ;
809
+ }
779
810
onBindViewHolder ( holder : any , index : number ) : void {
780
811
const owner = this . owner ? this . owner . get ( ) : null ;
781
812
if ( owner ) {
0 commit comments