从 Firestore 获取单词不会更新 LazyColumn Jetpack Compose

5 android kotlin android-jetpack-compose lazycolumn compose-recomposition

@Composable
fun getData() {
        var wordData = arrayListOf<Word>()
        db.get().addOnSuccessListener { documents ->
            for (document in documents) {
                wordData.add(document.toObject(Word::class.java))
            }
        }
        LazyColumn {
            items(wordData) {  word ->
                WordCard(word = word)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想使用 Lazy Column 显示我所有的单词数据,这些是我的 WordCard 代码。

@Composable
fun WordCard(word: Word) {
    Text(text = word.word, color = Color.Black, modifier = Modifier.background(Color.Gray).padding(12.dp))
}
Run Code Online (Sandbox Code Playgroud)

z.g*_*g.y 4

不确定这是否是firebase问题,但我注意到了这一点。

\n
var wordData = arrayListOf<Word>()\n
Run Code Online (Sandbox Code Playgroud)\n

您只是将元素添加到标准集合结构中,而不是 compose 可以观察状态更改以更新您的LazyColumn.

\n

因此,请将其更改为 this usingSnapshotStateList并将其包装为 a remember{\xe2\x80\xa6},以便列表不会在成功的重新组合时重新初始化

\n
val wordData = remember { mutableStateListOf<Word>() }\n
Run Code Online (Sandbox Code Playgroud)\n