2010-01-04 29 views
33

Tôi có Android ListView được tạo với một SimpleAdapter có nhiều mục trong đó hơn là vừa với màn hình. Sau khi danh sách đã được cuộn, tôi cần lấy vị trí trong mô hình dữ liệu của mục hiển thị đầu tiên trong danh sách.Android ListView: lấy chỉ mục dữ liệu của mục hiển thị

Về cơ bản, tôi muốn có một chức năng như: listView.getChildAt(0).getPositionInDataModel().

Adapter có một vài chức năng trong đó, như getItemId(position) trông hữu ích; tuy nhiên, việc triển khai thực hiện SimpleAdapter chỉ trả về vị trí được truyền vào vị trí, không phải là id hàng như tôi đã hy vọng.

Giải pháp bạo lực sẽ là lấy Chế độ xem tại chỉ mục 0 và so sánh nó với chế độ xem cho từng mục trong bộ điều hợp. Tuy nhiên, có vẻ như không phải là cách dễ dàng để có được chế độ xem cho một vị trí cụ thể từ bộ điều hợp.

Mọi người đều có bất kỳ suy nghĩ nào?

Trả lời

90

Rất dễ dàng. Chỉ cần sử dụng ListView.getFirstVisiblePosition() + indexYouWant. Ví dụ: để có được vị trí trong bộ điều hợp của đứa trẻ thứ 2 được hiển thị trong ListView, chỉ cần sử dụng getFirstVisiblePosition() + 1.

Không cần cho tất cả những thứ đáng sợ thể hiện trong bài trả lời ở trên :)

+2

Wow, tôi không thể tin rằng mình đã bỏ lỡ điều đó. Tôi đang tìm kiếm tất cả các chức năng như thế. Phải có được bởi vì nó được định nghĩa trong một lớp cha mẹ mà tôi không mong đợi nó. Vẫn quen với phong cách javadoc này ... Cảm ơn bạn đã chỉ ra! –

+0

@RomainGuy, Bạn đã lưu hiệu suất ListView của mình ... –

+0

Một số quan điểm giữa getFirstVisiblePosition() và getLastVisiblePosition() trả về null trong Gridview của tôi. Tôi tái chế các quan điểm mặc dù - là nguyên nhân? Tôi hy vọng rằng lượt xem có thể nhìn thấy sẽ được đảm bảo không bị vô hiệu hóa đặc biệt vì tôi có thể nhìn thấy chúng một cách trực quan. – Laurent

1
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
{ 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    { 
     AisleId= parent.getSelectedItemId(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 
}); 

Trong này, chúng tôi sẽ nhận được danh sách mục Id parent.getSelectedItemId();

-1

Chỉ cần sử dụng getPositionForView(View) (see documentation). Ưu điểm chính của phương pháp này là nó cũng hoạt động với hậu duệ View s của một mục.

+1

Tại sao điều này lại được bình chọn? Nó có hoạt động không? –

+0

Nó không trả lời câu hỏi –

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