我在 Jetpack Compose 中使用 lazycolumn 来显示包含在 viewModel 中的用户列表时遇到了一些困难。
当应用加载时,前几个用户的数据会正确显示,但是,随着用户向下滚动,更多用户可见,数据并不总是显示在 UI 中。
此外,如果用户向上滚动,之前可见的数据将不再显示。
我认为这与重组过程中丢失的数据有关,但我不知道如何解决此问题
主活动
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ListPracticeTheme {
val viewModel : MainViewModel by viewModels()
Surface(color = MaterialTheme.colors.background) {
UsersList(viewModel = viewModel)
}
}
}
}
}
用户列表
@Composable
fun UsersList(viewModel: MainViewModel) {
LazyColumn(
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
items(viewModel.users.value) { user ->
Card(
modifier = Modifier.fillMaxWidth()
) {
Column(Modifier.fillMaxWidth()) {
Text(text = "USER ID = ${user.userID}")
Text(text = "USERNAME = ${user.userName}")
Text(text = "DESCRIPTION = ${user.description}")
}
}
}
}
}
主视图模型
class MainViewModel : ViewModel() {
var users : MutableState<List<User>> = mutableStateOf(ArrayList())
init{
for(i in 1..20){
users.value += randomPost()
}
}
}
当用户滚动时,UI 未正确更新,如本视频所示:
相反,当用户滚动时,应该显示更多的用户数据,当用户向上滚动时,这些数据应该再次可见。
答案 0 :(得分:0)
您可以尝试只将 135257 INFO: checking PKG
135257 INFO: Building PKG because PKG-00.toc is non existent
135257 INFO: Building PKG (CArchive) PKG-00.pkg
的值传递到您的 viewModel.users
中。
答案 1 :(得分:0)
这显然是一个已确认的错误,已在 Compose beta-08 中修复。只需将 Compose 版本升级到那个版本,将 Kotlin 版本升级到 1.5.10 就可以了