2010-06-24 33 views
10

Có cách nào để xem Chế độ xem hiển thị đầu tiên trong ListView trong Android không?Cách xem Chế độ xem hiển thị đầu tiên từ Android ListView

Tôi có thể lấy dữ liệu sao lưu Chế độ xem đầu tiên trong Bộ điều hợp nhưng có vẻ như tôi không thể có Chế độ xem đầu tiên trong Chế độ xem danh sách.

Tôi muốn thay đổi chế độ xem hiển thị đầu tiên sau khi thao tác cuộn hoàn tất. Tôi biết rằng tôi không nên lưu tham chiếu đến chế độ xem.

+0

Chế độ xem được tái chế. Bạn cần cái nhìn cụ thể để làm gì? –

+0

Tôi chỉnh sửa câu hỏi của mình. Tôi muốn thay đổi chế độ xem sau khi người dùng cuộn danh sách. – Janusz

Trả lời

12

Thực tế các mục ListView chỉ là con của ListView. Vì vậy, lần đầu tiên mục ListView có thể nhìn thấy là:

listView.getChildAt(0) 
+0

cảm ơn bạn làm việc tuyệt vời nếu bạn thăm dò xem trả về cho null. Dường như việc di chuyển và xây dựng danh sách đôi khi xảy ra cùng một lúc nếu bạn bắt đầu hoạt động và đôi khi danh sách không có con. – Janusz

+5

Tôi nghĩ cách này là sai. Bởi vì bạn nhận được mục đầu tiên được tải. và có lẽ mục đó không được nhìn thấy trước tiên. Nhưng listView.getFirstVisiblePosition() là tốt hơn và làm việc tốt luôn. – NrNazifi

+0

Không chính xác nếu có tiêu đề. –

3

ListView có chức năng getFirstVisiblePosition như vậy để có được cái nhìn rõ ràng đầu tiên, mã sẽ là:

listView.getChildAt(listView.getFirstVisiblePosition());

+7

Có sự khác biệt giữa vị trí childAt() và vị trí được trả về bởi getFirstVisiblePosition(). Vị trí của getFirstVisiblePosition là vị trí trong bộ điều hợp dữ liệu của tôi. ChildAt chỉ tính các lượt xem vào tài khoản hiển thị trong chế độ xem danh sách vào lúc này. – Janusz

+0

Tôi thích câu trả lời và thấy hữu ích khi tìm một thứ gì đó hiệu quả. Tuy nhiên, việc sử dụng childAt với vị trí trong bộ điều hợp không hoạt động. Nếu bạn sử dụng fetFirstVisiblePosition, bạn phải chuyển nó lại cho bộ điều hợp bằng cách sử dụng getItem. Vì vậy, chính xác hơn sẽ là adapter.getItem (listview.getFirstVisiblePosition). Tuy nhiên, trong trường hợp đó bạn không có cái nhìn như op được hỏi. Tuy nhiên, cảm ơn vì đã chỉ ra điều này. –

3

Thật vậy listView.getChildAt(listView.getFirstVisiblePosition()) cung cấp cho các mục có thể nhìn thấy đầu tiên,
NHƯNG có thể là một nửa có thể nhìn thấy mục danh sách.

Để có được đầu tiên mục danh sách hoàn toàn có thể nhìn thấy,

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

Bạn có thể sử dụng đoạn mã sau:

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

listView.scrollBy (0, -40);

Điều này hoạt động rất tốt

Các vấn đề liên quan