RecyclerView與下拉重新整理控制元件滑動衝突的解決

sun_xin發表於2017-12-14

問題描述

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);
                }
            }
        });
複製程式碼

專案中遇到的問題,僅此記錄一下

相關文章