問題描述
RecyclerView使用下拉重新整理更新資料的時候,如果更新前在列表的某個位置,更新後位置也會處於上次的一個位置,然後下拉的時候會發現列表拉不動,下拉重新整理的控制元件反倒是拉下來了,很明顯,下拉重新整理控制元件處理了本不屬於他自己的事件。這不是我們想要的結果。
解決思路
我們不從View的事件傳遞與處理方面考慮問題,而是從RecyclerView的滑動方面入手。我們監測RecyclerView的滑動事件,判斷列表第一個條目是否完全可見,如果沒有完全可見,我們就把重新整理控制元件禁用掉,不和RecyclerView搶事件了,否則再把重新整理控制元件啟用。
程式碼
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstCompletelyVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
if (firstCompletelyVisibleItemPosition <=0 ){
refreshLayout.setEnabled(true);
}else {
refreshLayout.setEnabled(false);
}
}
});
複製程式碼
專案中遇到的問題,僅此記錄一下