Tuỳ chỉnh danh sách động Một phần của Android Jetpack.
Bạn có thể tuỳ chỉnh các đối tượng RecyclerView
để đáp ứng nhu cầu cụ thể của mình. Các lớp chuẩn được mô tả trong bài viết Tạo danh sách động bằng RecyclerView cung cấp tất cả chức năng mà hầu hết các nhà phát triển cần. Trong nhiều trường hợp, bạn chỉ cần thiết kế khung hiển thị cho từng trình lưu trữ khung hiển thị và viết mã để cập nhật các khung hiển thị đó 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ể, thì bạn có thể sửa đổi hành vi chuẩn theo một số cách.
Tài liệu này mô tả một số tuỳ chỉnh có thể có.
Sửa đổi bố cục
RecyclerView
sử dụng trình quản lý bố cục để định vị các mục riêng lẻ trên màn hình và xác định thời điểm sử dụng lại thành phần hiển thị mục không còn hiển thị cho người dùng. Để sử dụng lại hoặc tái chế một khung hiển thị, 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 khung hiển thị bằng một phần tử khác với tập dữ liệu. Việc tái chế khung hiển thị theo cách này sẽ cải thiện hiệu suất bằng cách tránh tạo các khung hiển thị không cần thiết hoặc thực hiện các thao tác tra cứu findViewById()
tốn kém. Thư viện hỗ trợ Android bao gồm ba trình quản lý bố cục tiêu chuẩn, trong đó 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ụngRecyclerView
vớiLinearLayoutManager
cung cấp chức năng như bố cụcListView
.GridLayoutManager
: sắp xếp các mục trong một lưới hai chiều, chẳng hạn như các hình vuông trên một bàn cờ. Việc sử dụngRecyclerView
vớiGridLayoutManager
cung cấp chức năng như bố cụcGridView
.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ờ Mỹ.
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 ảnh động để thay đổi giao diện của mục đó. Trình tạo ả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 ảnh động của riêng mình 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 cách chạm hoặc nhập bằng chuột. Điều này cho phép bạn duy trì quyền kiểm soát đối với cách trình bày trực quan của một mục đã chọn. Bạn cũng có thể nắm quyền kiểm soát đối với các chính sách kiểm soát hành vi lựa chọn, chẳng hạn như mục nào đủ điều kiện để lựa chọn và số lượng mục có thể được chọn.
Để thêm tính năng hỗ trợ lựa chọn vào 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 chính mà bạn có thể dùng để xác định các mục đã chọn:
Parcelable
và các lớp con của nó, chẳng hạn nhưUri
String
Long
Để 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
View
của mục trongRecyclerView
để phản ánh việc người dùng chọn hay bỏ chọn các mục đó.Thư viện lựa chọn không cung cấp trang trí hình ảnh mặc định cho các mục đã chọn. Cung cấp mã 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ượngView
bằngtrue
hoặ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 sử dụng tài nguyên danh sách trạng thái màu để định cấu hình kiểu.
- Trong
- Sử dụng
ActionMode
để cung cấp cho người dùng các công cụ nhằm thực hiện thao tác trên nội dung đã chọn. - Thực hiện mọi thao tác phụ đã được diễn giải.
- Tập hợp mọi thứ với
SelectionTracker.Builder
. - Đưa lựa chọn vào các sự kiện vòng đời hoạt động.
ItemDetailsLookup
cho phép thư viện lựa chọn truy cập vào thông tin về các mục RecyclerView
dựa trên MotionEvent
.
Đây thực sự là một nhà máy cho thực thể ItemDetails
được sao lưu hoặc trích xuất từ thực thể RecyclerView.ViewHolder
.
Đăng ký SelectionTracker.SelectionObserver
để được thông báo khi lựa chọn thay đổi. Khi một lựa chọn được tạo lần đầu tiên, hãy bắt đầu ActionMode
để hiển thị lựa chọn này cho người dùng và cung cấp các hành động lựa chọn cụ thể. Ví dụ: bạn có thể thêm nút xoá vào thanh ActionMode
và nối mũi tên quay lại trên thanh để xoá lựa chọn. Khi lựa chọn không có nội dung (nếu người dùng xoá lựa chọn vào lần gần nhất) 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 đó hay đang cố kéo một mục hay một nhóm 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 cho thấy cách kết hợp các thành phần này lại với nhau:
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 thực thể SelectionTracker
, ứng dụng của bạn phải cung cấp cùng một RecyclerView.Adapter
mà bạn sử dụng để khởi chạy RecyclerView
đến SelectionTracker.Builder
. Vì lý do này, sau khi bạn tạo thực thể SelectionTracker
, hãy chèn thực thể đó vào RecyclerView.Adapter
. Nếu không, bạn sẽ không thể kiểm tra trạng thái của một mục đã chọn qua phương thức onBindViewHolder()
.
Để duy trì trạng thái lựa chọn trong các sự kiện trong vòng đời hoạt động, ứng dụng của bạn phải gọi phương thức onSaveInstanceState()
và onRestoreInstanceState()
của trình theo dõi lựa chọn từ phương thức onSaveInstanceState()
và onRestoreInstanceState()
của hoạt động tương ứng. Ứng dụng của bạn cũng phải cung cấp một mã nhận dạng 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à có thể chọn, tất cả đều cần đượ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.
- Lớp học lập trình Kiến thức cơ bản về cách tạo ứng dụng Android bằng Kotlin: Kiến thức cơ bản về RecyclerView.