2014-10-26 33 views
22

Tôi mới bắt đầu sử dụng RecyclerView và tôi thấy nó thiếu nhiều tính năng như header, footer, divider, list selector, bây giờ tôi có những suy nghĩ thứ hai về việc sử dụng nó thay vì ListView.Ưu điểm của RecyclerView so với ListView là gì?

Ưu điểm và nhược điểm của RecyclerView so với ListView là gì? Nó có thể xử lý các khung nhìn phức tạp hơn ListView không?

Tôi đã sử dụng ListView cho đến bây giờ và trong một vài thời gian, đã đến lúc chuyển sang RecyclerView hay đã quá sớm chưa?

+1

tất cả những tính năng hiện nay nằm ngoài Xem, xem http://www.grokkingandroid.com/first-glance -androids-recyclerview/ – pskink

Trả lời

79

Với sự ra đời của Android Lollipop, RecyclerView đã chính thức được phát hành. RecyclerView là nhiều hơn nữa mạnh mẽ, linh hoạt và tăng cường lớn hơn ListView. Tôi sẽ cố gắng cung cấp cho bạn một cái nhìn chi tiết về nó.

Ưu

1) ViewHolder Pattern

Trong một ListView, nó được khuyến khích sử dụng các mô hình ViewHolder nhưng nó chưa bao giờ là bắt buộc. Trong trường hợp RecyclerView, điều này là bắt buộc khi sử dụng lớp RecyclerView.ViewHolder. Đây là một trong những khác biệt lớn giữa ListView và RecyclerView.

Nó làm cho mọi thứ phức tạp hơn một chút trong RecyclerView nhưng rất nhiều vấn đề mà chúng ta phải đối mặt trong ListView được giải quyết một cách hiệu quả.

2) LayoutManager

Đây là một cải tiến lớn đưa đến RecyclerView. Trong một ListView, kiểu xem duy nhất có sẵn là ListView dọc. Không có cách chính thức để thậm chí thực hiện một ListView ngang.

Bây giờ sử dụng một RecyclerView, chúng ta có thể có một

i) LinearLayoutManager - mà hỗ trợ cả hai danh sách dọc và ngang,

ii) StaggeredLayoutManager - hỗ trợ Pinterest như danh sách so le,

iii) GridLayoutManager - hỗ trợ hiển thị lưới như trong ứng dụng Thư viện.

Và điều tốt nhất là chúng ta có thể thực hiện tất cả những động thái này theo ý muốn.

3) mục Animator

ListViews đang thiếu trong việc hỗ trợ hình ảnh động tốt, nhưng RecyclerView mang một chiều hướng hoàn toàn mới với nó. Sử dụng lớp RecyclerView.ItemAnimator, làm cho hoạt ảnh trở nên dễ dàng và trực quan hơn rất nhiều.

4) mục Trang trí

Trong trường hợp của ListViews, động trang trí các mặt hàng giống như thêm biên giới hoặc ngăn không bao giờ dễ dàng. Nhưng trong trường hợp của RecyclerView, lớp RecyclerView.ItemDecorator cho phép kiểm soát rất lớn đối với các nhà phát triển nhưng làm cho mọi thứ tốn thời gian và phức tạp hơn một chút.

5) OnItemTouchListener

Chặn nhấp chuột mục trên một ListView là đơn giản, nhờ vào giao diện AdapterView.OnItemClickListener của nó. Nhưng RecyclerView cung cấp nhiều quyền lực và kiểm soát hơn cho các nhà phát triển của nó bằng cách RecyclerView.OnItemTouchListener nhưng nó làm phức tạp mọi thứ một chút cho nhà phát triển.

Nhược

i) Đây là cách phức tạp hơn với chế độ xem danh sách.

ii) Có thể mất rất nhiều thời gian để người mới bắt đầu hiểu đầy đủ về RecyclerView.

iii) Nó có thể làm cho cuộc sống mã hóa của bạn khó khăn một cách không cần thiết.

iv) Bạn sẽ cần phải dành thời gian nhiều hơn với nó hơn bạn đã bao giờ cần thiết cho một ListView

+0

Giải thích tốt dude :) +1 –

+0

Lời giải thích hay ... Tôi đang gặp vấn đề trong khi phát hiện vị trí mục của chế độ xem dễ thấy nhất ở trên để tôi có thể hiển thị ngày của mục đó trong khi cuộn như whatsapp… bất kỳ đề xuất nào liên quan đến điều đó sẽ giúp tôi rất nhiều ... đó là một miếng bánh nếu tôi đã sử dụng listview ... cảm ơn trước ... – srv242

+0

Nếu tôi hiểu vấn đề của bạn chính xác, thì đây là điều bạn có thể muốn xem, https://gist.github.com/mipreamble/b6d4b3d65b0b4775a2 2e # file-recyclerviewpositionhelper-java –

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