2014-09-22 46 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);