簡體   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