[英]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.