2010-09-28 54 views
8

Khi ghi đè baseadapter trên danh sách xem android, bạn phải triển khai phương thức này public View getView(int position, View convertView, ViewGroup parent). Chuyển đổi là chế độ xem trước đó đã bị đẩy ra khỏi danh sách khi cuộn và được đưa ra để bạn có thể sử dụng lại chế độ xem đó thay vì tạo chế độ xem mới.Chế độ xem tái chế trong chế độ xem danh sách, đáng giá?

Câu hỏi của tôi là, có thực sự cần thiết để sử dụng lại chế độ xem không? Tôi có thể hiểu việc sử dụng lại nó nếu chỉ một phần dữ liệu được thay đổi. Nhưng là chi phí của việc tạo ra một cái nhìn thực sự có ý nghĩa? Mỗi hướng dẫn về cách sử dụng danh sách xem tôi đã thấy cho bạn biết để tái chế chế độ xem, ngay cả trên lượt xem đơn giản tầm thường như lượt xem văn bản.

Tôi đoán câu hỏi của mình là tại sao Google quyết định đặt hành vi này làm mặc định theo phương thức getView?

+1

Đây không phải là việc khó và khung làm cho nó dễ dàng .. Vì vậy, có giá trị rõ ràng nó. – Rorist

Trả lời

13

Một vài lý do để tái chế lần xem:

  • tạo Object là tương đối tốn kém. Mỗi đối tượng bổ sung được tạo ra cần phải được xử lý bởi hệ thống thu gom rác và ít nhất là tạm thời làm tăng bộ nhớ của bạn
  • Điều này quan trọng hơn đối với các chế độ xem phức tạp hơn, nhưng việc tăng và đặt các đối tượng xem có thể tốn kém. Thông thường, bạn chỉ thực hiện các thay đổi nhỏ cho chế độ xem trong getView mà sẽ không ảnh hưởng đến bố cục (ví dụ: thiết lập văn bản) để bạn có thể tránh được phí trên bố cục.
  • Hãy nhớ rằng Android được thiết kế để chạy trong môi trường hạn chế tài nguyên.
  • Cuối cùng, nó đã được thực hiện cho bạn, và nó chắc chắn không làm tổn thương bất cứ điều gì, vậy tại sao không sử dụng nó?
+0

ít nhất một lý do không làm điều đó là nếu bạn muốn có bố trí khác nhau cho các hàng khác nhau trong listview. nếu bạn thực sự sử dụng các bố cục khác nhau, bạn không thể tái chế chế độ xem hòa nhạc. để có thể tái chế, bạn cần phải kết hợp các chế độ xem hàng có thể khác nhau thành chế độ xem uber. có đắt hơn không tái chế các lượt xem nhỏ hơn không? tôi không biết. –

+8

@JeffreyBlattman Sai. BaseAdapter hỗ trợ các mục danh sách xem khác nhau với getItemViewType (int position) và getViewTypeCount(). ListView sẽ xử lý việc tái chế chính xác cho bạn sau khi bạn đã cung cấp khung nhìn chính xác trong getView(). –

+3

cảm ơn vì đã sửa tôi. –

7

Có cần thiết không? Chỉ khi bạn thích thêm 30-40 khung hình/giây khi đang di chuyển trên Nexus One. :) (Xem các trang trình bày từ http://code.google.com/events/io/2010/sessions/world-of-listview-android.html, trang trình bày 13-17)

Tại sao thiết bị hoạt động mà thiết bị không cần thực hiện bằng cách bỏ qua tối ưu hóa đáng kể đã được thực hiện 95% cho bạn?

+0

Tôi đoán đó là câu hỏi của tôi. Chính xác thì chi phí mà việc tái sử dụng một chế độ xem cung cấp – Falmarri

+1

Việc tăng tốc từ XML là một phần rất lớn của nó. Churn đối tượng ít quan trọng hơn nhưng có thể dẫn đến tạm dừng GC đáng chú ý trong quá trình văng, đặc biệt là trên các thiết bị cũ hơn. – adamp

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