2011-01-17 40 views
6

Tôi muốn lặp lại một danh sách các mục vào một ListView. Mã dưới đây là không đủ để lặp lại tất cả các mục trong danh sách vì hành vi kỳ lạ của hàm getChildCount() chỉ trả về số mục có thể nhìn thấy.Lặp lại các mục ListView trong Android

for (int i = 0; i < list.getChildCount(); i++) { 
    item = (View)list.getChildAt(i); 
    product = (Product)item.getTag(); 
    // make some visual changes if product.id == someProductId 
} 

hiển thị màn hình của tôi 7 kết quả và khi có hơn 7 mặt hàng vào danh sách, nó không thể truy cập vào các mục 8 hoặc lâu hơn .. mục Chỉ có thể nhìn thấy ..

Tôi có nên sử dụng ListIterator thay thế?

Cảm ơn.

+0

Làm cách nào để bạn điền dữ liệu, Nếu bạn đang sử dụng bộ điều hợp, hãy vượt qua phương thức getCount() của bộ điều hợp danh sách – Reno

Trả lời

1

Bạn cần để tùy chỉnh phương pháp chuyển đổi danh sách của bạn getView(), và đưa séc của bạn bên trong nó để kiểm tra xem các trận đấu id mục hiện hành của:

Product product = items.get(position); 
if(product.id == someProductId) { 
    //make visual changes 
} else { 
    //reset visual changes to default to account for recycled views 
} 

Kể từ thường chỉ các mặt hàng có thể nhìn thấy chỉ tồn tại một thời điểm cụ thể, getView được gọi là bất cứ khi nào cần được nhìn thấy. Chúng được tạo vào thời điểm đó, thường là các chế độ xem tái chế từ các mục hiện tại trong danh sách (vì vậy tại sao bạn muốn đặt lại các thay đổi nếu các tiêu chí KHÔNG khớp).

+0

Hi kcoppock. Cảm ơn vì đã trả lời. Bây giờ nó hoạt động như tôi mong đợi, ngoại trừ nó không cập nhật phần hiển thị của giao diện người dùng cho đến khi tôi cuộn. Có sự kiện nào tôi có thể kích hoạt để làm mới giao diện người dùng không. – pocoa

+1

Yup, bạn có thể gọi 'listView.notifyDatasetChanged();'. Điều đó sẽ làm mới ListAdapter, tuy nhiên, nó phải đúng ngay cả trước khi cuộn; getView được gọi khi mỗi khung nhìn được xây dựng. Bạn có thể đăng mã của ListAdapter vào câu hỏi gốc không? – kcoppock

+0

Cảm ơn sự giúp đỡ của bạn. Tôi rất tiếc khi chấp nhận điều đó muộn. Tôi nghĩ tôi đã chấp nhận. Chúc mừng. – pocoa

0

Số lượt xem trong ListView (7) khác với số lượng mục trong bộ điều hợp (nhiều hơn 7). Thử sử dụng BaseAdapter.

1

Vì vậy, @kcoppock đã giải quyết vấn đề đầu tiên của bạn có vẻ như bạn gặp phải sự cố khác. Cách cập nhật mục xem? Việc áp dụng tin nhắn SMS Android cho thấy một cách:

  1. tạo mục danh sách xem riêng của bạn như thế này:

    public class MyListItem extends RelativeLayout { 
    ... 
    } 
    

    trong danh sách file layout view mục của bạn:

    < MyListItem android:layout_width=.....> 
    ... 
    </ MyListItem > 
    
  2. và trong bạn mã, khi xem mục của bạn có thể được nhìn thấy, đăng ký MyListItem như một người nghe dữ liệu thay đổi (dữ liệu là tùy thuộc vào bạn). Ý tôi là, khi dữ liệu của bạn thay đổi, bạn có thể cập nhật trực tiếp mục đó.

Kiểm tra mã nguồn ứng dụng SMS để đọc thêm.

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