0

J'utilise la base de données firebase avec FirebaseRecyclerAdapter de firebaseui. J'ai suivi l'exemple ici:
https://github.com/firebase/FirebaseUI-Android/tree/master/database -sauf que j'utilise un fragment.Fragment Android avec FirebaseRecyclerAdapter perd la position de défilement lors de la rotation

L'application fonctionne bien et je n'ai aucun problème, sauf que lorsque l'appareil est pivoté, la vue recycleur ne restaure pas sa position de défilement et à la place se réinitialise à l'élément supérieur. - par exemple, l'utilisateur fait défiler 8 éléments vers le bas, puis fait pivoter l'appareil. l'utilisateur doit être dans la même position de défilement, mais à la place la position est revenue en haut. Je suppose que je pourrais simplement mettre du code supplémentaire pour gérer cela et faire défiler la page vers la bonne position, mais je sais par expérience que la vue recycleur devrait gérer cela tout seul. est-ce que le firebaseRecyclerAdapter exige que je gère cela?

grâce

Répondre

0

répondre à ma propre question-

La seule façon que je suis en mesure d'obtenir ce travail est de sauver l'Etat comme ceci:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    mRvPositionIndex = mLayoutManager.findFirstVisibleItemPosition(); 
    View startView = mRecyclerView.getChildAt(0); 

    mRvTopView = (startView == null) ? 0 : (startView.getTop() - mRecyclerView.getPaddingTop()); 

    outState.putInt(RV_POS_INDEX, mRvPositionIndex); 
    outState.putInt(RV_TOP_VIEW, mRvTopView); 
} 

puis à onCreateView, juste après avoir mis l'adaptateur que je fais ce

if (savedInstanceState != null) { 

     mRvPositionIndex = savedInstanceState.getInt(RV_POS_INDEX); 
     mRvTopView = savedInstanceState.getInt(RV_TOP_VIEW); 

     mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
      public void onItemRangeInserted(int positionStart, int itemCount) { 

       mLayoutManager.scrollToPositionWithOffset(mRvPositionIndex, mRvTopView); 
      } 
     }); 
    } 

ne l'ont fait un peu t esting jusqu'à présent mais semble fonctionner correctement. Si quelqu'un a une meilleure solution, faites le moi savoir.