2017-07-14 4 views
0

Dans mon projet, j'utilise un RecyclerView avec pulltorefresh et charge plus de données lorsque défile vers le bas.Voici un fragment de code.pourquoi findLastVisibleItemPosition renvoie 1 tandis que RecyclerView ajoute des données pour la première fois

mData.addAll(data); 
mAdapter.notifyDataSetChanged(); 
LinearLayoutManager layoutManager = (LinearLayoutManager) this.getLayoutManager(); 
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); 
int visibleItemCount = layoutManager.getChildCount(); 
int totalItemCount = layoutManager.getItemCount(); 

Je trouve que lorsque les premières données de charge RecyclerView, et toutes les données ne peuvent pas remplir la hauteur de l'écran, le lastVisibleItemPosition et l'visibleItemCount est par exemple wrong.For, je charge 10 articles, tout élément peut afficher dans la scrren. le totalItemCount est 10 mais le lastVisibleItemPosition est 1 et le totalItemCount est 2. (devrait être 9 et 10). Mais lorsque j'actualise RecyclerView (Recharger les données par le même code.) Ou charge plus de données, findLastVisibleItemPosition est correct.

Et lorsque RecyclerView commence par charger les données et afficher à l'écran, je vérifie que findLastVisibleItemPosition est correct. Donc, ma question est, est-ce que notifyDataSetChanged est une fonction aysnc? si c'est le cas, quel événement puis-je obtenir la findLastVisibleItemPosition correcte ou y a-t-il un meilleur moyen de l'obtenir?

Merci de lire mon mauvais anglais.

Répondre

0

vous pouvez essayer:

recyclerView.post(new Runnable() { 
      @Override 
      public void run() { 
       LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager(); 
       lm.findLastCompletelyVisibleItemPosition(); 
      } 
     }); 

voir aussi: get visible items in recyclerview