2010-06-24 166 views
10

有沒有辦法在Android中從ListView獲取第一個可見視圖?如何從Android ListView獲取第一個可見視圖

我可以獲得支持適配器中第一個視圖的數據,但看起來我無法在ListView中獲得第一個視圖。

我想在滾動操作完成後更改第一個可見視圖。我知道我不應該保存對視圖的引用。

+0

視圖被回收。你需要什麼具體的觀點? – 2010-06-24 14:50:17

+0

我編輯我的問題。我想在用戶滾動列表後更改視圖。 – Janusz 2010-06-24 15:06:52

回答

12

其實ListView項目只是ListView的子項。所以,第一個可見的ListView項是:

listView.getChildAt(0) 
+0

如果您探測返回的視圖爲null,非常感謝您的工作。看起來,如果您開始活動並且有時候列表中沒有孩子,則滾動和列表構建有時會同時發生。 – Janusz 2010-06-25 09:06:38

+5

我認爲這種方式是錯誤的。因爲你得到了第一個加載的項目。也許這個項目不是第一次可見的。但是listView.getFirstVisiblePosition()更好,並且總是很好。 – NrNazifi 2012-10-02 06:30:46

+0

如果有標題,則不準確。 – 2016-05-30 02:10:43

3

ListView中有一個功能getFirstVisiblePosition因此要獲得第一個可見視圖,代碼爲:

listView.getChildAt(listView.getFirstVisiblePosition());

+7

childAt()位置與getFirstVisiblePosition()返回的位置之間存在差異。 getFirstVisiblePosition的位置是我的數據適配器中的位置。 ChildAt僅考慮目前在列表視圖中可見的視圖。 – Janusz 2010-06-25 08:06:53

+0

我喜歡這個答案,並且發現它有用於找到可以工作的東西。然而,使用childAt與適配器的位置wsill不起作用。如果使用fetFirstVisiblePosition,則必須使用getItem再次將其傳遞給適配器。所以更正確的是adapter.getItem(listview.getFirstVisiblePosition)。然而,在那種情況下,你不會像操作系統那樣提出問題。不過,謝謝你指出這一點。 – 2014-11-29 10:18:31

3

事實上listView.getChildAt(listView.getFirstVisiblePosition())給人的第一個可見項目,
但它可能是一半可見列表項。

要獲得第一個完全可見的列表項,

if (listView.getChildAt(0).getTop() < 0) { 
    int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1; 
} 
0

您可以使用下面的代碼:

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) { 
     View listItem = conversationListView.getChildAt(i); 
} 
0

listView.scrollBy(0,-40);

這很好用

相關問題