Android GridView/ListView与SwipeRefreshLayout 常见的冲突解决并不完美

一个小bug,关于下拉冲突问题,分两步:

1.判断GridView/ListView滑动到顶部再激活下拉,

2.离开顶部关闭下拉;

但是 这边第一种方案有一个问题:

 当GridView中第一个item出现在屏幕上端,即使只出现一部分,也会认为到达了顶部,

从而造成没到顶部就激活了下拉, 成为一个失败的方案.

失败方案举例:

mGridView.setOnScrollListener(new AbsListView.OnScrollListener() {  
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
    }  
  
  
    @Override  
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,         
    int totalItemCount) {  
        if (firstVisibleItem == 0) {  
            mSwipeRefreshLayout.setEnabled(true);
            Log.d("ListView", "滚动到顶部");  
        } else {
            mSwipeRefreshLayout.setEnabled(false);   
        }
        if ((firstVisibleItem + visibleItemCount) == totalItemCount) {  
            Log.d("ListView", "滚动到底部");  
        }  
    }  
});  

成功方案举例:

原理: 判断item出现, 同时判断第一个item距离头部的距离

 mGridView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {


            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (view.getCheckedItemPosition() == 0) {

                } else {
                    swlayout.setEnabled(false);
                }
                if (firstVisibleItem == 0) {
                    View firstVisibleItemView = mGridView.getChildAt(0);
                    if (firstVisibleItemView != null && firstVisibleItemView.getTop() == 0) {
                        swlayout.setEnabled(true);
                    } else {
                        swlayout.setEnabled(false);
                    }
                } else {
                    swlayout.setEnabled(false);
                }

                // 判断滚动到底部
                if (view.getLastVisiblePosition() == (view.getCount() - 1)) {
                    
                }
            }
        });

经检验,问题已成功解决.

发布了54 篇原创文章 · 获赞 212 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/90897284