@@ -317,11 +317,7 @@ export class CollectionView extends CollectionViewBase {
317317 nativeView . setRecycledViewPool ( null ) ;
318318 this . recycledViewPoolDisposeListener = null ;
319319 this . recycledViewPool = null ;
320- if ( nativeView . scrollListener ) {
321- this . nativeView . removeOnScrollListener ( nativeView . scrollListener ) ;
322- nativeView . scrollListener = null ;
323- this . _nScrollListener = null ;
324- }
320+ this . detachScrollListenerIfNecessary ( true ) ;
325321 nativeView . sizeChangedListener = null ;
326322 nativeView . layoutManager = null ;
327323 this . _listViewAdapter = null ;
@@ -333,12 +329,14 @@ export class CollectionView extends CollectionViewBase {
333329 super . disposeNativeView ( ) ;
334330 }
335331
336- @profile
337332 onLoaded ( ) {
338333 super . onLoaded ( ) ;
339- this . attachScrollListener ( ) ;
340- // this.refresh();
334+ this . attachScrollListenerIfNecessary ( ) ;
341335 }
336+ // onUnloaded() {
337+ // super.onUnloaded();
338+ // this.detachScrollListenerIfNecessary();
339+ // }
342340
343341 _getSpanSize : ( item , index ) => number ;
344342 public getViewForItemAtIndex ( index : number ) : View {
@@ -372,30 +370,26 @@ export class CollectionView extends CollectionViewBase {
372370 return this . _getSpanSize ;
373371 }
374372
375- @profile
376- private attachScrollListener ( ) {
377- if ( this . _scrollOrLoadMoreChangeCount > 0 && this . isLoaded ) {
378- const nativeView = this . nativeViewProtected ;
379- if ( ! nativeView . scrollListener ) {
380- this . _nScrollListener = new com . nativescript . collectionview . OnScrollListener . Listener ( {
381- onScrollStateChanged : this . onScrollStateChanged . bind ( this ) ,
382- onScrolled : this . onScrolled . bind ( this )
383- } ) ;
384- const scrollListener = new com . nativescript . collectionview . OnScrollListener ( this . _nScrollListener ) ;
385- nativeView . addOnScrollListener ( scrollListener ) ;
386- nativeView . scrollListener = scrollListener ;
387- }
373+ private attachScrollListenerIfNecessary ( ) {
374+ const nativeView = this . nativeViewProtected ;
375+ if ( this . _scrollOrLoadMoreChangeCount > 0 && nativeView && ! nativeView . scrollListener ) {
376+ this . _nScrollListener = new com . nativescript . collectionview . OnScrollListener . Listener ( {
377+ onScrollStateChanged : this . onScrollStateChanged . bind ( this ) ,
378+ onScrolled : this . onScrolled . bind ( this )
379+ } ) ;
380+ const scrollListener = new com . nativescript . collectionview . OnScrollListener ( this . _nScrollListener ) ;
381+ nativeView . addOnScrollListener ( scrollListener ) ;
382+ nativeView . scrollListener = scrollListener ;
388383 }
389384 }
390-
391- private detachScrollListener ( ) {
392- if ( this . _scrollOrLoadMoreChangeCount === 0 && this . isLoaded ) {
393- const nativeView = this . nativeViewProtected ;
385+ private detachScrollListenerIfNecessary ( force = false ) {
386+ const nativeView = this . nativeViewProtected ;
387+ if ( force || ( this . _scrollOrLoadMoreChangeCount === 0 && nativeView ) ) {
394388 if ( nativeView . scrollListener ) {
395389 this . nativeView . removeOnScrollListener ( nativeView . scrollListener ) ;
396390 nativeView . scrollListener = null ;
397- this . _nScrollListener = null ;
398391 }
392+ this . _nScrollListener = null ;
399393 }
400394 }
401395 private computeScrollEventData ( view : androidx . recyclerview . widget . RecyclerView , eventName : string , dx ?: number , dy ?: number ) {
@@ -473,7 +467,7 @@ export class CollectionView extends CollectionViewBase {
473467 super . addEventListener ( arg , callback , thisArg ) ;
474468 if ( arg === CollectionViewBase . scrollEvent || arg === CollectionViewBase . scrollStartEvent || arg === CollectionViewBase . scrollEndEvent || arg === CollectionViewBase . loadMoreItemsEvent ) {
475469 this . _scrollOrLoadMoreChangeCount ++ ;
476- this . attachScrollListener ( ) ;
470+ this . attachScrollListenerIfNecessary ( ) ;
477471 }
478472 }
479473
@@ -482,7 +476,7 @@ export class CollectionView extends CollectionViewBase {
482476
483477 if ( arg === CollectionViewBase . scrollEvent || arg === CollectionViewBase . scrollStartEvent || arg === CollectionViewBase . scrollEndEvent || arg === CollectionViewBase . loadMoreItemsEvent ) {
484478 this . _scrollOrLoadMoreChangeCount -- ;
485- this . detachScrollListener ( ) ;
479+ this . detachScrollListenerIfNecessary ( ) ;
486480 }
487481 }
488482
0 commit comments