使用清單和分頁功能延遲載入資料

透過延遲載入和分頁功能,您可以在應用程式中載入及逐步顯示資料,以支援大量項目清單 (包括無限清單)。這項技巧可讓您減少初始載入時間,並最佳化記憶體用量,進而提升效能。

版本相容性

這個實作方式需要將專案 minSDK 設為 API 級別 21 以上。

依附元件

顯示分頁內容

透過 Paging 程式庫,您可以從本機儲存空間或網路中取得較大的資料集,並載入及顯示多頁資料。使用以下程式碼顯示分頁清單,並顯示進度列,向使用者指出系統正在擷取更多資料:

@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)
            }
        }
    }
}

程式碼的重點

  • LazyColumn:這個可組合項可用於有效率地顯示大量項目 (訊息) 清單。它只會轉譯螢幕上看得到的項目,因此可節省資源和記憶體。
  • lazyPagingItems 物件可有效管理 LazyColumn 內分頁資料的載入和顯示作業。它會將 LazyPagingItems 傳遞至 LazyColumn 可組合函式中的 items
  • MessageRow(message: Text) 負責轉譯個別訊息項目,可能會在資訊卡中顯示訊息的寄件者和文字。
  • MessagePlaceholder() 會在擷取實際訊息資料時提供視覺預留位置 (載入旋轉圖示),提升使用者體驗。

結果

以下影片顯示,當使用者捲動時,大型清單擷取資料的結果行為。

包含此指南的集合

本指南是精選的快速指南系列之一,涵蓋更廣泛的 Android 開發目標:

清單和格線可讓應用程式以視覺上賞心悅目且使用者易於取用的形式顯示集合。
瞭解可組合函式如何讓您輕鬆根據 Material Design 設計系統,建立美觀的 UI 元件。
本系列影片將介紹各種 Compose API,快速向您展示可用的 API 和使用方式。

有問題或意見回饋嗎?

請前往常見問題頁面,瞭解快速指南或與我們聯絡,分享您的想法。