簡體   English   中英

LazyColumn - Items 關鍵參數用途?

[英]LazyColumn - Items Key parameter purpose?

有人能解釋一下 LazyListScope 的 items/itemsIndexed function 中“key”參數的主要用途是什么嗎? 如果我們指定該參數,我們會得到什么或不會得到什么? 我不確定我是否理解與此參數相關的官方文檔:

key - 代表項目的穩定且唯一的密鑰工廠。 不允許對列表中的多個項目使用相同的鍵。 密鑰的類型應該可以通過 Android 上的 Bundle 保存。如果 null 被傳遞,列表中的 position 將代表密鑰。 當您指定鍵時,滾動 position 將根據鍵進行維護,這意味着如果您在當前可見項目之前添加/刪除項目,則具有給定鍵的項目將保留為第一個可見項目。

我認為最好的答案是由 官方文檔提供的:

默認情況下,每個項目的state都是針對列表中項目的 position鍵入的。 但是,如果數據集發生變化,這可能會導致問題,因為更改 position 的項目實際上會丟失任何記住的 state。如果您想象LazyRow中的LazyColumn場景,如果行更改項目 position,則用戶將在其中丟失滾動條 position該行。

為了解決這個問題,您可以為每個項目提供一個穩定且唯一的密鑰,為key參數提供一個塊。 提供穩定的密鑰可以使項目 state 在數據集更改之間保持一致

@Composable
fun MessageList(messages: List<Message>) {
    LazyColumn {
        items(
            items = messages,
            key = { message ->
                // Return a stable + unique key for the item
                message.id
            }
        ) { message ->
            MessageRow(message)
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM