Trong
Android Developer, chúng ta có thể thực hiện Scrolling list sử dụng một
ListView hoặc một RecyclerView. Chúng ta hãy so sánh 2 phương pháp
này:
ListView và RecyclerView - một câu chuyện ngắn
Trong phát triển dự án Android, chúng ta có thể thực hiện scrolling list bằng một vài cách, phụ thuộc vào thứ chúng ta muốn làm. Phương pháp phổ biến là sử dụng ListView hoặc RecyclerView
ListView là một widget cũ được sử dụng tốt trong Android SDK từ API 1. Cho đến khi Android Lollipop được release, chúng ta vẫn sử dụng nó và nó không quá tệ. Thật không may, nó chỉ cho phép chúng ta scrolling theo chiều dọc và để có thể scrolling được mượt mà, chúng ta phải làm nó đúng cách.
Hơn nữa, class ListView là quá nặng, nó đang phải đảm nhiệm quá nhiều trách nhiệm.Khi mà chúng ta xử lý list như là cấu hình nó trong cách nào đó, con đường duy nhất để làm điều này là thông qua object listview hoặc bên trong adapter.
Ngày nay chúng ta sử dụng RecyclerView, như tôi đã đề cập, nó được giới thiệu trong Android Lollipop và đã chứng minh thay đổi cuộc chơi. Rất nhiều thứ chúng ta ghét trong ListView sẽ được sửa chữa hoặc thay đổi trong RecyclerView. Mặc định hiệu qủa hơn, layout được phân cách và chúng ta có nhiều khả năng hơn cho dữ liệu cài đặt trong adapter.
Có những khác nhau quan trọng giữa ListView và RecylerView:
1. ViewHolder
ViewHolder pattern cho phép chúng ta scrolling mượt mà. Nó lưu trữ tham chiếu row views và cảm ơn vì điều đó, cuộc gọi findViewById() chỉ được gọi một vài lần, thay vì toàn bộ dữ liệu cho mỗi lần bind view.
Apdater của RecyclerView tập trung vào sử dụng ViewHolder pattern. Việc tạo (inflating layout và finding views) và updating views được chia ra làm 2 phương thức:
_ onCreateViewHolder() và onBindViewHolder()
Trong listview không có ViewHolder, chúng ta sẽ xử lý trong getView()
2. LayoutManager
Trước đây, với việc sử dụng ListView chúng ta chỉ có thể tạo một vertical-scrolling list, điều này thực sự không linh hoạt.
LayoutManager chịu trách nhiêm bố trí các views. Class này đưa cho chúng ta cơ hội chọn con đường chúng ta muốn hiển thị row views và cách để scroll nó. Cho ví dụ nếu bạn muốn scroll theo chiều dọc hoặc ngang bạn có thể sử dụng LinearLayoutManager. Cho grids, sẽ thích hợp hơn nếu chọn GridLayoutManager.
3. ItemDecoration
Một nhiệm vụ của ItemDecoration là một học thuyết đơn giản - thêm một vài trang trí cho list row views - nhưng trong thực hành nó chỉ đơn giản là custom điều gì đó. Trong trường hợp này, chúng ta sẽ kế thừa class ItemDecoration. Ví dụ, RecyclerView mặc định không có dividers giữa các rows, nó thích hợp với hướng dẫn của Material Design. Tuy nhiên, nếu bạn muốn thêm một divider, chúng ta có thể sử dụng DividerItemDecorations và thêm nó vào RecyclerView.
Trong trường hợp bạn sử dụng ListView chúng ta sẽ phải tự cấu hình trang trí của các rows, sẽ không có các class hỗ trợ như ItemDecoration.
4. ItemAnimator
Thành phần cuối cùng của RecyclerView nhưng không kém phần quan trọng mà tôi muốn đề cập đến là ItemAnimator. Như bạn mong đợi, nó xử lý các animation của row views giống như
khi list xuât hiện, hay ẩn đi, thêm hay xoá một view cụ thể, v.v... Để đơn giản chúng ta sẽ kế thừa từ class SimpleItemAnimator và thực hiện các phương thức cần thiết của nó.
5. Notifying adapter
Chúng ta có một số thông báo trong adapter của RecyclerView. Chúng ta vẫn có thể sử dụng notifyDataSetChanged() nhưng cũng có thêm một số hàm thông báo cho từng phần tử của list như là notifyItemInserted(), notifyItemRemoved() hoặc notifyItemChanged(). Chúng ta sẽ sử dụng những hàm thích hợp nhất cho những trường hợp thực tế.
Sử dụng ListView, chúng ta chỉ có thể sử dụng hàm notifyDataSetChanged() trên adapter và sau đó chúng ta sẽ phải tự xử lý phần còn lại.
Tóm lại
ListView đã được sử dụng trong một thời gian dài, nó có thể sử dụng trong hầu hết các trường hợp nhưng nhu cầu của người dùng đã thay đổi, giao diện ngày càng trở lên phức tạp hơn, ListView đã không còn đáp ứng được nữa.
May thay, RecyclerView đã được giới thiệu và giải quyết hầu hết các vấn đề của nó. Nó hiệu qủa hơn, animations đơn giản hơn, layouting của nó thì đơn giản hơn để sử dụng, Vì thế nếu bạn đang tự hỏi nên lựa chọn cái nào, thì suy nghĩ đầu tiên là RecyclerView.
ListView và RecyclerView - một câu chuyện ngắn
Trong phát triển dự án Android, chúng ta có thể thực hiện scrolling list bằng một vài cách, phụ thuộc vào thứ chúng ta muốn làm. Phương pháp phổ biến là sử dụng ListView hoặc RecyclerView
ListView là một widget cũ được sử dụng tốt trong Android SDK từ API 1. Cho đến khi Android Lollipop được release, chúng ta vẫn sử dụng nó và nó không quá tệ. Thật không may, nó chỉ cho phép chúng ta scrolling theo chiều dọc và để có thể scrolling được mượt mà, chúng ta phải làm nó đúng cách.
Hơn nữa, class ListView là quá nặng, nó đang phải đảm nhiệm quá nhiều trách nhiệm.Khi mà chúng ta xử lý list như là cấu hình nó trong cách nào đó, con đường duy nhất để làm điều này là thông qua object listview hoặc bên trong adapter.
Ngày nay chúng ta sử dụng RecyclerView, như tôi đã đề cập, nó được giới thiệu trong Android Lollipop và đã chứng minh thay đổi cuộc chơi. Rất nhiều thứ chúng ta ghét trong ListView sẽ được sửa chữa hoặc thay đổi trong RecyclerView. Mặc định hiệu qủa hơn, layout được phân cách và chúng ta có nhiều khả năng hơn cho dữ liệu cài đặt trong adapter.
Có những khác nhau quan trọng giữa ListView và RecylerView:
1. ViewHolder
ViewHolder pattern cho phép chúng ta scrolling mượt mà. Nó lưu trữ tham chiếu row views và cảm ơn vì điều đó, cuộc gọi findViewById() chỉ được gọi một vài lần, thay vì toàn bộ dữ liệu cho mỗi lần bind view.
Apdater của RecyclerView tập trung vào sử dụng ViewHolder pattern. Việc tạo (inflating layout và finding views) và updating views được chia ra làm 2 phương thức:
_ onCreateViewHolder() và onBindViewHolder()
Trong listview không có ViewHolder, chúng ta sẽ xử lý trong getView()
2. LayoutManager
Trước đây, với việc sử dụng ListView chúng ta chỉ có thể tạo một vertical-scrolling list, điều này thực sự không linh hoạt.
LayoutManager chịu trách nhiêm bố trí các views. Class này đưa cho chúng ta cơ hội chọn con đường chúng ta muốn hiển thị row views và cách để scroll nó. Cho ví dụ nếu bạn muốn scroll theo chiều dọc hoặc ngang bạn có thể sử dụng LinearLayoutManager. Cho grids, sẽ thích hợp hơn nếu chọn GridLayoutManager.
3. ItemDecoration
Một nhiệm vụ của ItemDecoration là một học thuyết đơn giản - thêm một vài trang trí cho list row views - nhưng trong thực hành nó chỉ đơn giản là custom điều gì đó. Trong trường hợp này, chúng ta sẽ kế thừa class ItemDecoration. Ví dụ, RecyclerView mặc định không có dividers giữa các rows, nó thích hợp với hướng dẫn của Material Design. Tuy nhiên, nếu bạn muốn thêm một divider, chúng ta có thể sử dụng DividerItemDecorations và thêm nó vào RecyclerView.
Trong trường hợp bạn sử dụng ListView chúng ta sẽ phải tự cấu hình trang trí của các rows, sẽ không có các class hỗ trợ như ItemDecoration.
4. ItemAnimator
Thành phần cuối cùng của RecyclerView nhưng không kém phần quan trọng mà tôi muốn đề cập đến là ItemAnimator. Như bạn mong đợi, nó xử lý các animation của row views giống như
khi list xuât hiện, hay ẩn đi, thêm hay xoá một view cụ thể, v.v... Để đơn giản chúng ta sẽ kế thừa từ class SimpleItemAnimator và thực hiện các phương thức cần thiết của nó.
5. Notifying adapter
Chúng ta có một số thông báo trong adapter của RecyclerView. Chúng ta vẫn có thể sử dụng notifyDataSetChanged() nhưng cũng có thêm một số hàm thông báo cho từng phần tử của list như là notifyItemInserted(), notifyItemRemoved() hoặc notifyItemChanged(). Chúng ta sẽ sử dụng những hàm thích hợp nhất cho những trường hợp thực tế.
Sử dụng ListView, chúng ta chỉ có thể sử dụng hàm notifyDataSetChanged() trên adapter và sau đó chúng ta sẽ phải tự xử lý phần còn lại.
Tóm lại
ListView đã được sử dụng trong một thời gian dài, nó có thể sử dụng trong hầu hết các trường hợp nhưng nhu cầu của người dùng đã thay đổi, giao diện ngày càng trở lên phức tạp hơn, ListView đã không còn đáp ứng được nữa.
May thay, RecyclerView đã được giới thiệu và giải quyết hầu hết các vấn đề của nó. Nó hiệu qủa hơn, animations đơn giản hơn, layouting của nó thì đơn giản hơn để sử dụng, Vì thế nếu bạn đang tự hỏi nên lựa chọn cái nào, thì suy nghĩ đầu tiên là RecyclerView.

Comments
Post a Comment