2017-07-14 521 views
0

在我的項目中,我使用帶有pulltorefresh的RecyclerView,並在滾動到bottom時加載更多數據。這裏是代碼片段。爲什麼findLastVisibleItemPosition返回1,而RecyclerView首先添加數據

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

我發現當RecyclerView第一負載數據,所有的數據無法填滿屏幕高度,lastVisibleItemPosition和visibleItemCount是wrong.For例子,我加載10個項目,所有項目可以在顯示scrren。 totalItemCount是10,但lastVisibleItemPosition是1,totalItemCount是2.(應該是9和10)。

但是,當我刷新RecyclerView(通過相同的代碼重新加載數據)或加載更多的數據時,findLastVisibleItemPosition是正確的。

而當RecyclerView第一次加載數據並顯示在屏幕上時,我檢查findLastVisibleItemPosition是否正確。

所以我的問題是,notifyDataSetChanged是一個aysnc函數嗎?如果是,哪個事件可以得到正確的findLastVisibleItemPosition?還是有更好的方法來獲取?

感謝您閱讀我可憐的英語。

回答

0

你可以試試:

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

還看到: get visible items in recyclerview