我的Android 2.1版有问题。它看起来像一个bug。
我将OnScrollListener
附加到我的listView。
我正在使用方法onScrollStateChanged(AbsListView view, int scrollState)
来监控我的列表视图的滚动状态。
scrollstate可以假设3个值(取自文档):
我假设 SCROLL_STATE_IDLE 将始终在其他两个状态之一后传递。 对于Android 2.1版来说,它总是如此。 SCROLL_STATE_TOUCH_SCROLL 后未传递 SCROLL_STATE_IDLE 如果您通过触摸停止投掷而不是让滚动自行停止,也会出现问题。 这种奇怪的行为使我的listView处于一种无法处理的状态。
Someonelse有同样的问题吗? 建议“不那么脏”的工作?
答案 0 :(得分:5)
我认为此案件已经注册了一个错误。
答案 1 :(得分:2)
我在2.2上遇到了类似的问题。
如果列表足够大,我向下滚动,当我的手指在屏幕上时,我得到第一个CROLL_STATE_TOUCH_SCROLL。当我的手指离开屏幕时,我得到了SCROLL_STATE_FLING。当我的视图停止移动时,我得到了SCROLL_STATE_IDLE。
但是,如果在滚动期间,它会到达“查看顶部”或“底部”,我只会滚动/投掷值而不会空闲。
我查看了Romain Guy的Shelves项目,他的实现在2.2.x上遇到了同样的问题我想知道他是否注意到了。
我还没有尝试过2.3.x
答案 2 :(得分:2)
我发现了一些解决方法(至少对于API级别9+,我仍然看到了这个错误)。我正在使用GridView,但我相信这也适用于ListView。
我正在使用GridView的子类来检测过度滚动(顶部或底部):
public class CustomGridView {
private boolean mIsOverScrolled = false;
@Override
protected void onOverScrolled(int scrollX, int scrollY,
boolean clampedX, boolean clampedY) {
mIsOverScrolled = true;
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
public boolean isOverScrolled() {
return mOsOverScrolled;
}
public void clearOverScroll() {
mIsOverScrolled = false;
}
}
然后,在我的CustomGridView的OnScrollListener中,我有:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
if (gridView.isOverScrolled()) {
gridView.clearOverScroll();
}
// ...
}
现在,当我检查OnScrollListener.SCROLL_STATE_IDLE
时,我还会检查是否!gridView.isOverScrolled()
。我不确定这是否能修复您的特定用例,但希望您可以使用额外的信息来确定您当前的状态,尽管存在错误。
答案 3 :(得分:0)
我遇到了同样的问题,并在DeRagan提到的错误列表上发布了一个解决方法: Link