2017-03-28 21 views
0

我用下面的代碼findLastCompletelyVisibleItemPosition()方法不工作的可變尺寸項目

private boolean isLastItemDisplaying(RecyclerView recyclerView){ 
    if (recyclerView.getAdapter().getItemCount() != 0) { 
     int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); 
     if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1) 
      return true; 
    } 
    return false; 
} 
private final RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(final RecyclerView recyclerView, final int newState) { 
     // code 
     if (isLastItemDisplaying(recyclerView)) { 
      if (loadallow){ 
       if (postProviderList.size()<20 && postProviderList.size()>=1) { 
        loadallow = false; 
       }else{ 
        loadallow = false; 
        LoadPostsMore(); 
       } 
      } 
     } 
    } 

    @Override 
    public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) { 
     // code 
    } 
}; 

以檢測recyclerview列表中可見的最後一個項目,並加載更多的物品。這一直工作良好,直到我有一些不同高度的項目和一些單一的項目高度幾乎相當於手機屏幕。然後isLastItemDisplaying(RecyclerView recyclerView)即使在最後一個項目可見時也返回false。我相信有更好的解決方案。

問題解決 這可能會幫助那些面臨同樣問題的人。問題出在findLastCompletelyVisibleItemPosition()方法。由於最後一個可見項的項目大小大於設備屏幕,所以該方法顯然返回錯誤。應該用findLastVisibleItemPosition()代替。現在這按預期工作。

回答

-1

所以你可以做的是,如果你想使用此代碼刪除最後一個項目:

adapter.postProviderList.remove(postProviderList.size()); 
adapter.notifyItemremoved(postProviderList.size()); 

希望這有助於:)

+0

首先,位置'postProviderList.size()'不存在於列表中,因此會給出空指針異常。最後一個項目位於'postProviderList.size() - 1',即使我添加了這種方式,您的代碼應用在哪裏。所以澄清你的答案之前,我downvote它... –

+0

張貼的東西沒有做最低限度的研究,並downvoting試圖幫助你證明你的人... – bharath

+0

弟弟。 ** @ bharath **如果您編輯它,我會提高您的答案。感謝您的幫助。其實你只是發佈了一個解決不了問題的答案。而且還寫了一個代碼,它會給出空指針異常... –