Có thể coi RecyclerView là phiên bản cao cấp của ListView. Nó tái sử dụng view nhằm tránh việc tạo view mới, cung cấp trải nghiệm cuộn rất mượt mà. Để làm được điều này, RecyclerView đã tích hợp trong nó “View pool”, một công cụ giúp lưu trữ các view không còn hiển thị và có thể tái sử dụng. Hôm nay chúng ta cùng tìm hiểu về RecyclerView lồng nhau nhé!
Bạn có thể tham khảo thêm cách sử dụng RecyclerView tại đây: Hướng dẫn toàn tập RecyclerView trong Android
Nội dung chính của bài viết
RecyclerView lồng nhau là gì?
Đôi khi chúng ta cần lồng các RecyclerViews vào với nhau để tạo bố cục hiển thị đúng yêu cầu khách hàng.
Mình lấy ví dụ phổ biến nhất chính là ứng dụng Google play. Ứng dụng này cũng sử dụng các RecycleView lồng nhau, khi RecyclerView ngang nằm trong RecyclerView dọc
Như hình trên, bạn có thể thấy một danh sách cuộn dọc cho nhiều danh sách cuộn ngang..
Khi người dùng vuốt theo chiều ngang, mỗi RecyclerView bên trong sẽ tái sử dụng các views và cho bạn một trải nghiệm cuộn trơn tru.
Nhưng khi người dùng cuộn theo chiều dọc thì sao?
Khi đó, mỗi view của một RecyclerView bên trong sẽ lại được tăng thêm. Điều này xảy ra là do mỗi RecyclerView lồng nhau có một khung nhìn (view pool) riêng của nó.
Nếu không được tối ưu tốt, người dùng sẽ cảm thấy cuộn rất lag.
Và đây là cách
Tối ưu hiệu năng cho RecyclerView lồng nhau
Chúng ta có thể tối ưu bằng cách tạo một view pool duy nhất cho tất cả các RecyclerViews bên trong.
RecyclerView.setRecycledViewPool(RecycledViewPool) cho phép bạn thiết lập một view pool tùy chỉnh cho RecyclerView.
Bạn cần code lại như sau
public OuterRecyclerViewAdapter(List<Item> items) { //Constructor stuff viewPool = new RecyclerView.RecycledViewPool(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //Create viewHolder etc holder.innerRecyclerView.setRecycledViewPool(viewPool); }
Khi đó các RecyclerViews bên trong có cùng một view pool. Với cách làm này sẽ giúp RecyclerView có thể sử dụng lịch sử view của nhau, từ đó cải thiện đáng kể hiệu năng
Như vậy, qua bài viết này, mình đã chia sẻ với các bạn thủ thuật rất nhỏ nhưng có tác dụng rất lớn, giúp ứng dụng của bạn luôn có trải nghiệm tốt nhất
Nếu thấy bài viết có ích thì đừng quen chia sẻ cho mọi người cùng đọc nhé
Bình luận. Cùng nhau thảo luận nhé!