繁体   English   中英

使用 LazyColumn 时,项目并不总是正确重组

[英]Items do not always recompose correctly when using LazyColumn

我在使用 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 没有正确更新,如下视频所示:

https://youtu.be/ETEuMGStIIk

相反,当用户滚动时,应该显示更多的用户数据,并且当用户向上滚动时,这些数据应该再次可见。

您可以尝试仅将viewModel.users的值传递到您的UsersList中。

这显然是一个已确认的错误,已在 Compose beta-08 中修复。 只需将 Compose 版本升级到该版本,并将 Kotlin 版本升级到 1.5.10 就可以了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM