Tải dữ liệu theo từng phần bằng danh sách và tính năng Phân trang

Với tính năng tải lười và Paging, bạn có thể hỗ trợ các danh sách lớn các mục (bao gồm cả danh sách vô hạn) trong ứng dụng bằng cách tải và hiển thị dữ liệu tăng dần. Kỹ thuật này cho phép bạn giảm thời gian tải ban đầu và tối ưu hoá mức sử dụng bộ nhớ, qua đó nâng cao hiệu suất.

Khả năng tương thích của phiên bản

Phương thức triển khai này yêu cầu bạn phải đặt minSDK của dự án thành API cấp 21 trở lên.

Phần phụ thuộc

Hiển thị nội dung được phân trang

Với thư viện Paging, bạn có thể tải và hiển thị các trang dữ liệu của một tập dữ liệu lớn hơn được lấy từ bộ nhớ cục bộ hoặc qua mạng. Sử dụng mã sau đây để hiển thị danh sách phân trang có thanh tiến trình cho người dùng biết rằng hệ thống đang tìm nạp thêm dữ liệu:

@Composable
fun MessageList(
    modifier: Modifier,
    pager: Pager<Int, Message>
) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
    @Composable
    fun MessagePlaceholder(modifier: Modifier) {
        Box(
            Modifier
                .fillMaxWidth()
                .height(48.dp)
        ) {
            CircularProgressIndicator()
        }
    }

    @Composable
    fun MessageRow(
        modifier: Modifier,
        message: Message
    ) {
        Card(modifier = Modifier.padding(8.dp)) {
            Column(
                modifier = Modifier.padding(8.dp),
                verticalArrangement = Arrangement.Center
            ) {
                Text(message.sender)
                Text(message.text)
            }
        }
    }
}

Các điểm chính về mã

  • LazyColumn: Thành phần kết hợp này được dùng để hiển thị một danh sách lớn các mục (thông báo) một cách hiệu quả. Phương thức này chỉ hiển thị các mục hiển thị trên màn hình, nhờ đó tiết kiệm tài nguyên và bộ nhớ.
  • Đối tượng lazyPagingItems quản lý hiệu quả việc tải và hiển thị dữ liệu được phân trang trong LazyColumn. Phương thức này truyền LazyPagingItems đến items trong thành phần kết hợp LazyColumn.
  • MessageRow(message: Text) chịu trách nhiệm hiển thị từng mục tin nhắn, có thể hiển thị người gửi và văn bản của tin nhắn trong một Thẻ.
  • MessagePlaceholder() cung cấp phần giữ chỗ trực quan (vòng quay đang tải) trong khi dữ liệu tin nhắn thực tế đang được tìm nạp, giúp nâng cao trải nghiệm người dùng.

Kết quả

Video sau đây cho thấy hành vi kết quả của một danh sách lớn tìm nạp dữ liệu khi người dùng cuộn.

Các bộ sưu tập chứa hướng dẫn này

Hướng dẫn này là một phần của các bộ sưu tập Hướng dẫn nhanh được tuyển chọn này, bao gồm các mục tiêu phát triển Android rộng hơn:

Danh sách và lưới cho phép ứng dụng của bạn hiển thị các bộ sưu tập ở dạng hình ảnh dễ nhìn và dễ sử dụng cho người dùng.
Tìm hiểu cách các hàm có khả năng kết hợp giúp bạn dễ dàng tạo các thành phần giao diện người dùng đẹp mắt dựa trên hệ thống thiết kế Material Design.
Loạt video này giới thiệu nhiều API Compose, nhanh chóng cho bạn biết những API có sẵn và cách sử dụng các API đó.

Bạn có câu hỏi hoặc ý kiến phản hồi

Hãy truy cập vào trang câu hỏi thường gặp để tìm hiểu về các hướng dẫn nhanh hoặc liên hệ với chúng tôi để cho chúng tôi biết suy nghĩ của bạn.