1. 程式人生 > >解決SwipeRefreshLayout下拉重新整理與ListView下拉的衝突

解決SwipeRefreshLayout下拉重新整理與ListView下拉的衝突

如果當我們使用 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);
            }
        });