2014-09-22 45 views
1

我已经实现了具有您在许多应用程序,在用户滚动至底部,并加载更多看到的功能一个ListView,即OnScrollListener是这样的:滚动一个ListView顶端,没有任何屏幕闪烁

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

我想出了解决方案。显然将ListView设置为View.GONE使其不更新其布局,所以我将其设置为View.INVISIBLE,而它工作。我甚至不必使用Runnable。

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