2012-05-20 41 views

Trả lời

39

Vâng vâng, có.

ListView.invalidateViews() được sử dụng để yêu cầu ListView vô hiệu tất cả các chế độ xem mục con của nó (vẽ lại chúng). Lưu ý rằng không cần phải có số lượt xem bằng nhau so với các mục. Đó là bởi vì một ListView tái chế các khung nhìn mục của nó và di chuyển chúng xung quanh màn hình một cách thông minh trong khi bạn cuộn.

Adapter.notifyDataSetChanged() mặt khác, là nói với người quan sát bộ điều hợp rằng nội dung của những gì đang được điều chỉnh đã thay đổi. Thông báo số liệu thay đổi sẽ gây ra listview để gọi các phương pháp adapter của bạn một lần nữa để điều chỉnh thanh cuộn, tái tạo quan điểm mục, vv ...

Hầu hết thời gian bạn muốn sử dụng notifyDataSetChanged thay vì invalidateViews, nhưng chắc chắn nó phụ thuộc vào những gì bạn đang cố gắng hoàn thành.

+0

Tôi hơi bối rối khi bạn nói _Lưu ý rằng không cần phải có số lượt xem bằng nhau so với mục_. Sự khác biệt giữa lượt xem và mục. –

+2

@black crow: Chế độ xem danh sách không tạo chế độ xem cho mỗi mục. Thay vào đó, nó thường chỉ có số lượt xem vừa với màn hình, và di chuyển chúng xung quanh khi bạn cuộn. Nói cách đơn giản: nó không tạo ra các khung nhìn cho các mục không hiển thị. –

+2

Bạn có không gian cho 10 lượt xem trên màn hình và bạn có 20 trong bộ điều hợp của mình ... vì vậy bạn có 10 chế độ xem và 20 mục. – Barak

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