Tuỳ chỉnh danh sách động Thuộc Android Jetpack.
Bạn có thể tuỳ chỉnh các đối tượng RecyclerView để đáp ứng nhu cầu cụ thể. Các lớp tiêu chuẩn được mô tả trong
Tạo danh sách động bằng
RecyclerView cung cấp tất cả các chức năng mà hầu hết các nhà phát triển đều cần. Trong nhiều trường hợp, bạn chỉ cần thiết kế chế độ xem cho mỗi trình lưu giữ chế độ xem và viết mã để cập nhật các chế độ xem đó bằng dữ liệu thích hợp. Tuy nhiên, nếu ứng dụng của bạn có các yêu cầu cụ thể, bạn có thể sửa đổi hành vi tiêu chuẩn theo một số cách.
Tài liệu này mô tả một số cách tuỳ chỉnh có thể.
Sửa đổi bố cục
RecyclerView sử dụng trình quản lý bố cục để đặt các mục riêng lẻ trên màn hình và xác định thời điểm dùng lại chế độ xem mục không còn hiển thị với người dùng. Để dùng lại (hoặc khôi phục) một chế độ xem, trình quản lý bố cục
có thể yêu cầu bộ chuyển đổi thay thế nội dung của chế độ xem bằng một
phần tử khác với tập dữ liệu. Việc khôi phục chế độ xem theo cách này giúp cải thiện hiệu suất bằng cách tránh tạo các chế độ xem không cần thiết hoặc thực hiện các lệnh tra cứu findViewById() tốn kém. Thư viện hỗ trợ Android bao gồm 3 trình quản lý bố cục tiêu chuẩn,
mỗi trình quản lý cung cấp nhiều tuỳ chọn tuỳ chỉnh:
LinearLayoutManager: sắp xếp các mục trong danh sách một chiều. Việc sử dụng aRecyclerViewvớiLinearLayoutManagercung cấp các chức năng như bố cục aListView.GridLayoutManager: sắp xếp các mục trong lưới hai chiều, chẳng hạn như hình vuông trên bàn cờ. Việc sử dụng mộtRecyclerViewvớiGridLayoutManagercung cấp các chức năng như mộtGridViewbố cục.StaggeredGridLayoutManager: sắp xếp các mục trong lưới hai chiều, mỗi cột được bù một chút so với cột trước đó, chẳng hạn như các dấu sao trên cờ Hoa Kỳ.
Nếu các trình quản lý bố cục này không phù hợp với nhu cầu của bạn, bạn có thể tạo trình quản lý bố cục riêng bằng cách mở rộng lớp trừu tượng RecyclerView.LayoutManager.
Thêm ảnh động cho mục
Bất cứ khi nào một mục thay đổi, RecyclerView sẽ sử dụng trình tạo hình động để thay đổi giao diện của mục đó. Trình tạo hình động này là một đối tượng mở rộng lớp trừu tượng RecyclerView.ItemAnimator. Theo mặc định, RecyclerView sử dụng DefaultItemAnimator để cung cấp ảnh động. Nếu muốn cung cấp ảnh động tuỳ chỉnh, bạn có thể xác định đối tượng trình tạo hình động của riêng bạn bằng cách mở rộng RecyclerView.ItemAnimator.
Bật lựa chọn mục danh sách
Thư viện
recyclerview-selection
cho phép người dùng chọn các mục trong danh sách RecyclerView bằng thao tác nhấn
hoặc thao tác đầu vào bằng chuột. Điều này cho phép bạn duy trì quyền kiểm soát bản trình bày trực quan của một mục đã chọn. Bạn cũng có thể duy trì quyền kiểm soát các chính sách kiểm soát hành vi lựa chọn, chẳng hạn như những mục đủ điều kiện để chọn và số lượng mục có thể chọn.
Để thêm tính năng hỗ trợ lựa chọn vào một thực thể RecyclerView, hãy làm theo các bước sau:
- Xác định loại khoá lựa chọn cần sử dụng, sau đó tạo
ItemKeyProvider.Có 3 loại khoá mà bạn có thể sử dụng để xác định các mục đã chọn:
Parcelablevà các lớp con của nó, chẳng hạn nhưUriStringLong
Để biết thông tin chi tiết về các loại khoá lựa chọn, hãy xem
SelectionTracker.Builder. - Triển khai
ItemDetailsLookup. - Cập nhật các đối tượng mục
ViewtrongRecyclerViewđể phản ánh việc người dùng chọn hay bỏ chọn các đối tượng đó.Thư viện lựa chọn không cung cấp trang trí trực quan mặc định cho các mục đã chọn. Hãy cung cấp trang trí này khi bạn triển khai
onBindViewHolder(). Bạn nên sử dụng phương pháp sau:- Trong
onBindViewHolder(), hãy gọisetActivated()–không phảisetSelected()– trên đối tượngViewbằngtruehoặcfalse, tuỳ thuộc vào việc mục có được chọn hay không. - Cập nhật việc định kiểu của chế độ xem để thể hiện trạng thái đã kích hoạt. Bạn nên dùng tài nguyên danh sách trạng thái màu để cấu hình việc định kiểu.
- Trong
- Sử dụng
ActionModeđể cung cấp cho người dùng các công cụ thực hiện một hành động trên lựa chọn. - Thực hiện mọi hành động phụ được diễn giải.
- Tập hợp mọi thứ bằng
SelectionTracker.Builder. - Đưa lựa chọn vào các sự kiện trong vòng đời hoạt động.
ItemDetailsLookup cho phép thư viện lựa chọn truy cập
thông tin về các mục RecyclerView được cung cấp
MotionEvent.
Đây là một nhà máy hiệu quả cho
ItemDetails
các thực thể được sao lưu hoặc trích xuất từ một
RecyclerView.ViewHolder
thực thể.
Đăng ký
SelectionTracker.SelectionObserver
để được thông báo khi lựa chọn thay đổi. Khi lựa chọn được tạo lần đầu tiên,
hãy bắt đầu ActionMode để trình bày lựa chọn này cho người dùng và cung cấp
các hành động dành riêng cho lựa chọn. Ví dụ: bạn có thể thêm nút xoá vào thanh
ActionMode và kết nối mũi tên quay lại trên thanh để xoá
lựa chọn. Khi lựa chọn trở thành trống (nếu người dùng xoá lựa chọn lần cuối), hãy chấm dứt chế độ hành động.
Vào cuối quy trình xử lý sự kiện, thư viện có thể xác định
rằng người dùng đang cố kích hoạt một mục bằng cách nhấn vào mục đó hoặc đang cố gắng kéo một mục hoặc một tập hợp các mục đã chọn. Phản ứng với những diễn giải này bằng cách đăng ký trình nghe thích hợp. Để biết thêm
thông tin, hãy xem
SelectionTracker.Builder.
Ví dụ sau đây cho thấy cách kết hợp các phần này:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Để tạo một
SelectionTracker
thực thể, ứng dụng của bạn phải cung cấp cùng một
RecyclerView.Adapter
mà bạn dùng để khởi chạy RecyclerView thành
SelectionTracker.Builder. Vì lý do này, sau khi tạo thực thể
SelectionTracker, hãy chèn thực thể đó vào
RecyclerView.Adapter. Nếu không, bạn không thể kiểm tra trạng thái đã chọn của một mục từ phương thức onBindViewHolder().
Để duy trì trạng thái lựa chọn xuyên suốt các sự kiện trong vòng đời của activity, ứng dụng của bạn phải gọi các phương thức của trình theo dõi lựa chọn onSaveInstanceState() và onRestoreInstanceState() từ phương thức của activity onSaveInstanceState() và onRestoreInstanceState() tương ứng. Ứng dụng của bạn cũng phải cung cấp một mã nhận dạng (ID) lựa chọn duy nhất cho hàm khởi tạo
SelectionTracker.Builder. Mã nhận dạng này là bắt buộc vì
một hoạt động hoặc một mảnh có thể có nhiều danh sách riêng biệt và lựa chọn được,
tất cả các danh sách này đều phải được duy trì ở trạng thái đã lưu.
Tài nguyên khác
Hãy xem các tài liệu tham khảo sau để biết thêm thông tin.
- Ứng dụng minh hoạ Sunflower, sử dụng
RecyclerView. - Lớp học lập trình Sử dụng RecyclerView để hiển thị danh sách có thể cuộn.
- Kiến thức cơ bản về Kotlin cho Android: Lớp học lập trình kiến thức cơ bản về RecyclerView.