解決SwipeRefreshLayout下拉重新整理與ListView下拉的衝突
阿新 • • 發佈:2019-02-20
如果當我們使用 ListView 的時候使用了 SwipeRefreshLayout 下拉重新整理,那麼 ListView 的向下滑動就會與 SwipeRefreshLayout 的下拉重新整理產生衝突。當我們下拉介面時, SwipeRefreshLayout 會優先獲取事件,導致ListView不能夠正常下拉,那樣我們就看不到 ListView 當前顯示的 item 的以上的 item。
怎樣解決這個問題呢?我們來設定一個 ListView 的監聽器:OnScrollListener,監聽ListView 是否滑到了最上面的 item,如果在最上面,就將SwipeRefreshLayout 的狀態設定成 setEnabled(true),如果不再最頂端,就設定成setEnabled(false),這樣就可以阻止衝突了。具體程式碼如下:
ListView listView = (ListView)findViewById(R.id.list_view); SwipeRefreshLayout swipeRefreshlayout = (SwipeRefreshLayout)findViewById(R.id.activity_main); swipeRefreshlayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener(){ @Override public void onRefresh() { }); listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) swipeRefreshlayout.setEnabled(true); else swipeRefreshlayout.setEnabled(false); } });