Я нашел что-то вроде обходного пути для этого (по крайней мере, для уровня 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;
}
}
Затем в моем OnScrollListener CustomGridView у меня есть:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
if (gridView.isOverScrolled()) {
gridView.clearOverScroll();
}
// ...
}
Теперь, когда я проверяю на OnScrollListener.SCROLL_STATE_IDLE
, я также проверяю, есть ли !gridView.isOverScrolled()
.Я не уверен, исправит ли это ваши конкретные варианты использования, но, надеюсь, вы сможете использовать дополнительную информацию, чтобы определить ваше текущее состояние, несмотря на ошибку.