1. Xem chủ sở hữu
Trong ListView, xác định chủ sở hữu chế độ xem là cách tiếp cận được đề xuất để giữ tham chiếu cho chế độ xem. Nhưng nó không phải là một sự ép buộc. Mặc dù không làm như vậy, ListView đã sử dụng hiển thị dữ liệu cũ. Một nhược điểm lớn khác của việc không sử dụng chủ sở hữu chế độ xem có thể dẫn đến một hoạt động nặng nề là tìm kiếm lượt xem theo id mỗi lần. Điều này dẫn đến ListViews lag.
Vấn đề này được giải quyết trong RecylerView bằng cách sử dụng lớp RecyclerView.ViewHolder. Đây là một trong những khác biệt chính trong RecyclerView và ListView. Khi triển khai RecyclerView, lớp này được sử dụng để xác định một đối tượng ViewHolder được bộ điều hợp sử dụng để liên kết ViewHolder với một vị trí. Một điểm khác cần lưu ý ở đây là trong khi triển khai bộ điều hợp cho RecyclerView, việc cung cấp ViewHolder là bắt buộc. Điều này làm cho việc triển khai hơi phức tạp, nhưng giải quyết được các vấn đề gặp phải trong ListView.
2. Trình quản lý bố cục
Khi nói về ListView, chỉ có một loại ListView có sẵn, tức là ListView dọc. Bạn không thể triển khai ListView với cuộn ngang. Tôi biết có nhiều cách để thực hiện cuộn ngang, nhưng tôi tin rằng nó không được thiết kế để hoạt động theo cách đó.
Nhưng bây giờ khi chúng ta xem xét Android RecyclerView vs ListView, chúng ta cũng có hỗ trợ cho các bộ sưu tập theo chiều ngang. Trong thực tế, nó hỗ trợ nhiều loại danh sách. Để hỗ trợ nhiều loại danh sách, nó sử dụng lớp RecyclerView.LayoutManager. Đây là một cái gì đó mới mà ListView không có. RecyclerView hỗ trợ ba loại Trình quản lý bố cục được xác định trước:
LinearLayoutManager - Đây là trình quản lý bố cục được sử dụng phổ biến nhất trong trường hợp RecyclerView. Thông qua đó, chúng ta có thể tạo cả danh sách cuộn ngang và dọc. StaggeredGridLayoutManager - Thông qua trình quản lý bố cục này, chúng tôi có thể tạo danh sách so le. Giống như màn hình Pinterest. GridLayoutManager MySpace Trình quản lý bố cục này có thể được sử dụng để hiển thị các lưới, giống như bất kỳ thư viện ảnh nào.
3. Mục hoạt hình
Ảnh động trong một danh sách là một chiều hoàn toàn mới, có khả năng vô tận. Trong một ListView, như vậy, không có quy định đặc biệt nào thông qua đó người ta có thể làm động, thêm hoặc xóa các mục. Thay vào đó, sau này khi Android tiến hóa ViewPropertyAnimator được đề xuất bởi Google Chet Haase trong hướng dẫn bằng video này cho hoạt hình trong ListView.
Mặt khác, so sánh Android RecyclerView với ListView, nó có lớp RecyclerView.ItemAnimator để xử lý hình ảnh động. Thông qua lớp này, hình ảnh động tùy chỉnh có thể được xác định để thêm các mục, xóa và di chuyển các sự kiện. Ngoài ra, nó cung cấp một DefaultItemAnimator, trong trường hợp bạn không cần bất kỳ tùy chỉnh nào.
4. Bộ chuyển đổi
Bộ điều hợp ListView rất đơn giản để thực hiện. Họ đã có một phương thức chính getView nơi tất cả các phép thuật đã từng xảy ra. Nơi các quan điểm bị ràng buộc vào một vị trí. Ngoài ra, họ từng có một phương thức thú vị registerDataSetObserver nơi người ta có thể đặt một người quan sát ngay trong bộ điều hợp. Tính năng này cũng có trong RecyclerView, nhưng lớp RecyclerView.Ad CHƯƠNGDataObserver được sử dụng cho nó. Nhưng điểm có lợi cho ListView là nó hỗ trợ ba triển khai bộ điều hợp mặc định:
ArrayAd CHƯƠNG CthonAd Module SimpleCthonAdRAM Trong khi bộ điều hợp RecyclerView, có tất cả các chức năng mà các bộ điều hợp ListView có ngoại trừ hỗ trợ tích hợp cho con trỏ DB và ArrayLists. Hiện tại, trong RecyclerView.Ad CHƯƠNG chúng ta phải thực hiện tùy chỉnh để cung cấp dữ liệu cho bộ điều hợp. Giống như BaseAd CHƯƠNG làm cho ListViews. Mặc dù nếu bạn muốn biết thêm về triển khai bộ điều hợp RecyclerView, vui lòng tham khảo Ví dụ về RecyclerView của Android.
5. Thông báo thay đổi dữ liệu
Khi làm việc với ListView, nếu bộ dữ liệu bị thay đổi, bạn phải gọi phương thức notifyDataSetChanged của bộ điều hợp cơ bản để làm mới dữ liệu. Hoặc đặt phương thức setNotifyOnChange thành true trong trường hợp bạn muốn tự động gọi phương thức notifyDataSetChanged. Nhưng trong cả hai trường hợp, đi ra là rất nặng trong danh sách. Về cơ bản nó làm mới quan điểm của danh sách.
Nhưng ngược lại trong bộ điều hợp RecyclerView, nếu một mục duy nhất hoặc một phạm vi các mục đã thay đổi, có các phương pháp để thông báo thay đổi tương ứng. Đó là notifyItemChanged và notifyItemRangeChanged và nhiều hơn nữa như:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemond Và tất nhiên nó có phương thức ban đầu để làm mới toàn bộ danh sách tức là notifyDataSetChanged thông báo toàn bộ tập dữ liệu đã thay đổi.
6. Vật phẩm trang trí
Để hiển thị các bộ chia tùy chỉnh trong ListView, người ta có thể dễ dàng thêm các tham số này trong ListView XML:
XHTML android: spliter = "@ android: color / suốt" cho đến bây giờ nó không hiển thị một bộ chia giữa các mục theo mặc định. Mặc dù những kẻ ở Google phải bỏ cái này ra để tùy chỉnh, cố ý. Nhưng điều này làm tăng đáng kể nỗ lực cho một nhà phát triển. Nếu bạn muốn thêm một bộ chia giữa các mục, bạn có thể cần thực hiện tùy chỉnh bằng cách sử dụng lớp RecyclerView.ItemDecoration.
Hoặc bạn có thể áp dụng hack bằng cách sử dụng tệp này từ các mẫu chính thức: DividerItemDecor.java
7. OnItemTouchListener
Danh sách được sử dụng để thực hiện đơn giản để phát hiện các nhấp chuột, tức là bằng cách sử dụng giao diện AdapterView.OnItemClickListener.
Nhưng mặt khác, giao diện RecyclerView.OnItemTouchListener được sử dụng để phát hiện các sự kiện chạm trong Android RecyclerView. Nó làm phức tạp việc thực hiện một chút, nhưng nó mang lại sự kiểm soát lớn hơn cho nhà phát triển để chặn các sự kiện chạm. Các tài liệu chính thức nêu rõ, nó có thể hữu ích cho các thao tác cử chỉ vì nó chặn một sự kiện chạm trước khi nó được gửi đến RecyclerView.
RecyclerView
nhanh hơn và linh hoạt hơn với API tốt hơn nhiều. Những thứ như hoạt hình thêm hoặc loại bỏ các mục đã được thực hiện trongRecyclerView
mà không cần bạn phải làm gì cả. Không có câu hỏi về nó, ném của bạnListView
vào thùng rác,RecyclerView
là ở đây để ăn cắp chương trình.