2010-12-08 14 views
0

我希望我的應用程序做一些屏幕上的變化(ListView外)基於什麼是我的列表中的第一個可見項目。問題與getListView()。getFirstVisiblePosition()

我所做的是覆蓋onScroll處理程序。當調用此處理程序,我在我的光標位置設置爲第一個可見的位置,這樣我可以看看該行的數據:

 public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 
      mCursor.moveToPosition(getListView().getFirstVisiblePosition()); 
      ... 

我再引用數據的指針,使我的顯示變化。

這是事情:這項工作是參差不齊的。大多數時候它完美地工作。我無法讓它搞砸。然而,有時getListView()。getFirstVisiblePosition()不會返回1,直到第三個項目(索引2)纔是真正的第一個可見項目。當0索引顯示時,它顯示0。當顯示1個索引時,它顯示0。顯示2索引時顯示1等等。此外,它只在用戶向下滾動列表時執行此操作。如果用戶向後滾動(向上),getFirstVisiblePosition()返回正確的值。

我想知道這是否與某些效率問題無關。這個處理程序將隨着用戶的滾動一遍又一遍地執行。

有沒有人有任何想法可能是什麼問題?有沒有人有更好的解決方案?

更新:

難道我記得聽到getFirstVisiblePosition()是真的只是一種猜測;並且Android基本上假設行的可能高度可以使用哪個索引?如果是這樣,那麼我有一個問題。我列表中的一些行比其他行大。如果是這樣的話,有沒有辦法解決它?

回答

0

我實際上會在onScrollStateChanged中執行您的調用,並且只在滾動空閒時執行。您將大幅減少執行請求的數量。就像這樣:

public void onScrollStateChanged(final AbsListView view, final int scrollState) { 
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
     // do yer stuff 
    } 
} 
+0

我不確定這是否適用於我。基本上,我有一些列表項目之間的分隔符。但是,當你滾動時,任何分隔符屬於最上面的一組項目可能是不可見的(即:它已經滾動屏幕)。所以我已經將ListView放置在ListView上方,就像我的ListView中的分隔符一樣。我希望它上面的文本適合滾動時列表中顯示的頂部項目。 – Andrew 2010-12-08 20:45:26