Tuỳ chỉnh danh sách động Một phần của Android Jetpack.

Thử cách Compose
Jetpack Compose là bộ công cụ giao diện người dùng được đề xuất cho Android. Tìm hiểu cách sử dụng bố cục trong ứng dụng Compose.

Bạn có thể tuỳ chỉnh các đối tượng RecyclerView để đáp ứng các nhu cầu cụ thể của mình. Các lớp tiêu chuẩn được mô tả trong phần 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ế thành phần hiển thị cho từng phần tử giữ thành phần hiển thị và viết mã để cập nhật các thành phần hiển thị đó bằng dữ liệu thích hợp. Tuy nhiên, nếu ứng dụng có các yêu cầu cụ 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 các 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 trong tập dữ liệu. Việc tái chế các khung hiển thị theo cách này sẽ giúp cải thiện hiệu suất vì tránh được việc tạo các khung hiển thị không cần thiết hoặc thực hiện hoạt động 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 chuẩn, trong đó cung cấp nhiều lựa 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 RecyclerView với LinearLayoutManager cung cấp chức năng như bố cục ListView.
  • GridLayoutManager: sắp xếp các mục trong lưới hai chiều, chẳng hạn như các hình vuông trên bàn cờ. Việc sử dụng RecyclerView với GridLayoutManager cung cấp chức năng như bố cục GridView.
  • StaggeredGridLayoutManager: sắp xếp các mục trong lưới hai chiều, với mỗi cột được bù trừ một chút so với cột trước, chẳng hạn như các dấu sao trên lá 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 của riêng mình 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à đố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 thao tác 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ể giữ 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ư các mục đủ điều kiện để 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 một thực thể RecyclerView, hãy làm theo các bước sau:

  1. Xác định loại khoá lựa chọn để sử dụng, sau đó tạo một ItemKeyProvider.

    Có 3 loại khoá mà bạn có thể sử dụng để xác định các mục đã chọn:

    Để biết thông tin chi tiết về các loại khoá lựa chọn, hãy xem SelectionTracker.Builder.

  2. Triển khai ItemDetailsLookup.
  3. 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 các thực thể ItemDetails được sao lưu hoặc trích xuất từ một thực thể RecyclerView.ViewHolder.

  4. Cập nhật các đối tượng View của mục trong RecyclerView để 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 hình ảnh trang trí mặc định cho các mục đã chọn. Cung cấp thông tin 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ọi setActivated() (không phải setSelected()) trên đối tượng View bằng true hoặc false, 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 việc định kiểu.
  5. Sử dụng ActionMode để cung cấp cho người dùng các công cụ để thực hiện thao tác với lựa chọn.
  6. Đăng ký SelectionTracker.SelectionObserver để nhận 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 thao tác lựa chọn cụ thể. Ví dụ: bạn có thể thêm một 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 bị trống (nếu người dùng xoá lựa chọn vào lần gần đây nhất), hãy chấm dứt chế độ thao tác.

  7. Thực hiện mọi thao tác phụ đã được diễn giải.
  8. Ở 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 hay 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.

  9. Tập hợp mọi thứ bằng SelectionTracker.Builder.
  10. Ví dụ sau đây cho thấy cách ghép các 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 một thực thể SelectionTracker, ứng dụng phải cung cấp cùng một RecyclerView.Adapter mà bạn 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 không thể kiểm tra trạng thái đã chọn của một mục bằng phương thức onBindViewHolder().

  11. Đưa lựa chọn vào các sự kiện trong vòng đời hoạt động.
  12. Để 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()onRestoreInstanceState() của trình theo dõi lựa chọn lần lượt từ phương thức onSaveInstanceState()onRestoreInstanceState() của hoạt độ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ảnh có thể có nhiều danh sách riêng biệt và có thể chọn. Tất cả danh sách này đều cần phải 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 đây để biết thêm thông tin.