Android:onScrollStateChanged SCROLL_STATE_IDLE有时不会触发

Mar*_*yer 10 android listview scroll

我遇到了一些问题.我在做什么:我有一个ListView,里面有一些图像.为了使滚动更顺畅,我已禁用滚动时显示的图像.现在Android中似乎存在一个错误,有时会导致滚动状态不会从SCROLL_STATE_FLING变回SCROLL_STATE_IDLE,这会导致我的图像不再显示.

我的第一个想法是设置一个onTouchListener并检查何时获得ACTION_UP,但这没有用,因为之后显然设置了SCROLL_STATE_FLING状态.所以现在我认为我可以在设置SCROLL_STATE_FLING状态时启动计时器,并在一段时间后检查状态是否仍处于fling模式然后使我的视图无效.但我不认为这是一个非常好的解决方案.

有没有人对如何做到这一点有更好的想法?我已经看到了这个回复,但我需要一个API级别<9的解决方案(加上它有时也会发生,当它没有过度滚动时)

这是我的代码:

    mList.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            mListAdapter.setIsScrolling(scrollState != SCROLL_STATE_IDLE);
            Log.i(this, "scrollStateChanged" + scrollState);
            if (scrollState == SCROLL_STATE_IDLE) {
                mList.invalidateViews();
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    });
Run Code Online (Sandbox Code Playgroud)

谢谢,玛丽亚

小智 17

我有同样的问题,所以我的解决方案只是检测滚动视图位置是否已到达最后一页,在这种情况下总是加载图像而不管滚动状态(因为问题似乎总是发生在用户徘徊到最后列表视图).所以修改你的代码你会有:

mList.setOnScrollListener(new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        mListAdapter.setIsScrolling(scrollState != SCROLL_STATE_IDLE);
        Log.i(this, "scrollStateChanged" + scrollState);

        int first = view.getFirstVisiblePosition();
        int count = view.getChildCount();

        if (scrollState == SCROLL_STATE_IDLE || (first + count > mListAdapter.getCount()) ) {
            mList.invalidateViews();
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    }
});
Run Code Online (Sandbox Code Playgroud)