2017-06-02 1 views
0

J'essayais d'obtenir une disposition où il y avait un carrousel en haut et en dessous une grille d'images. L'activité a un RecyclerView et l'élément de ce RecyclerView (MainRV) ​​lui-même est un autre RecyclerView (ChildRV). J'ai fait le premier enfant de MainRV à utiliser un LinearlayoutManager avec Horizontal Scroll. Le deuxième enfant utilise un GridLayoutManager. Le ChildRV rend les éléments réels.L'onScrollListener de l'enfant imbriqué de RecyclerView ne s'est pas déclenché

Le problème est, je veux implémenter le chargement paresseux pour le deuxième enfant du MainRV (vue de grille). Mais, lorsque j'essaie d'ajouter onScrollListener à l'enfant, il ne se déclenche pas.

Ce que j'ai essayé:

I Tried réglage setNestedScrollingEnabled sur les deux MainRV et ChildRV. Cependant, il n'a pas déclenché l'onScrollListener.

J'ai implémenté le onScrollListener sur le MainRV et j'ai essayé d'obtenir le deuxième enfant après que l'état de défilement devienne IDLE. Mais quand j'appelle findLastVisibleItemPosition() sur le gridLayoutManager, il donne la position du dernier élément même si je suis en haut de la grille. Ci-dessous l'extrait du onScrollListener

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
     if(newState == RecyclerView.SCROLL_STATE_IDLE) { 

      RecyclerView recyclerView1 = (RecyclerView) recyclerView.getChildAt(1); 
      GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView1.getLayoutManager(); 

      Log.e("Scrolled activity pos", "" + gridLayoutManager.findLastVisibleItemPosition()); 
     } 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
    } 
}); 

La sortie du code ci-dessus donne la position du dernier élément qui est 49 dans mon cas.

Toute aide ou suggestion serait grandement appréciée.

Répondre

0

Le problème ici a été résolu lorsque j'ai supprimé le qualificateur "statique" sur le ViewHolder pour le RecyclerView imbriqué. Pour une raison quelconque, la réutilisation de la vue pour lier les éléments de la liste produisait de faux résultats lors de la recherche de l'élément lastVisiblItem. Si quelqu'un peut expliquer pourquoi alors je serais vraiment reconnaissant. Je ne pouvais pas comprendre.