一个小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)) {
}
}
});
经检验,问题已成功解决.