将ListView滚动到顶部,没有任何屏幕闪烁

时间:2014-09-22 20:32:38

标签: android listview

我已经实现了一个ListView,它具有您在许多应用程序中看到的功能,用户滚动到底部并加载更多,OnScrollListener就是这样:

public class OnScrolledToEndListener implements AbsListView.OnScrollListener
{
    private int prevLast;

    @Override
    public void onScrollStateChanged(AbsListView absListView, int i)
    {

    }

    @Override
    public void onScroll(AbsListView absListView, int first, int visible, int total)
    {
        int last = first + visible;
        if (last == total)
        {
            if (prevLast != last)
            {
                prevLast = last;
                onScrolledToEnd();
            }
        }
    }

    public void onScrolledToEnd()
    {

    }
}

现在的问题是,当用户滚动到列表底部并点击我的应用程序中的刷新按钮时,我希望它从列表顶部重新开始,因为如果它停留在列表的底部列表,然后滚动侦听器将立即触发。我发现解决此问题的最佳方法是在执行刷新之前执行以下操作:

mListView.setSelection(0);
mListView.post(
    new Runnable()
    {
        @Override
        public void run()
        {
            mListView.setVisibility(View.GONE);
            mLoadingLayout.setVisibility(View.VISIBLE);  //this is basically a progressbar
            // do the refresh
        }
    }
);

但是当列表滚动到顶部时会有轻微的闪烁。关于如何让它看起来更好的任何想法?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。显然将ListView设置为View.GONE使其不更新其布局,因此我将其设置为View.INVISIBLE而且它有效。我甚至不必使用Runnable。

mListView.setSelection(0);
mListView.setVisibility(View.INVISIBLE);
mLoadingLayout.setVisibility(View.VISIBLE);