我已经实现了一个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
}
}
);
但是当列表滚动到顶部时会有轻微的闪烁。关于如何让它看起来更好的任何想法?
答案 0 :(得分:1)
我找到了解决方案。显然将ListView设置为View.GONE
使其不更新其布局,因此我将其设置为View.INVISIBLE
而且它有效。我甚至不必使用Runnable。
mListView.setSelection(0);
mListView.setVisibility(View.INVISIBLE);
mLoadingLayout.setVisibility(View.VISIBLE);