java.lang.illegalstateException:在滚动式的懒惰列中,应将layoutnode附加到所有者

发布于 2025-01-24 12:33:09 字数 1365 浏览 0 评论 0原文

我正在使用lazycolumn和第3页上的lazycolumn来加载联系人,当我滚动列表时,有时会引发以下例外,

java.lang.IllegalStateException: LayoutNode should be attached to an owner
        at androidx.compose.ui.node.LayoutNodeKt.requireOwner(LayoutNode.kt:1407)
        at androidx.compose.ui.node.ModifierLocalConsumerNode.notifyConsumerOfChanges(ModifierLocalConsumerNode.kt:42)

以下是LazyColumn的代码:

val contactsFlow= viewModel.fetchContacts(context)
val lazyContacts = contactsFlow.collectAsLazyPagingItems()
    LazyColumn(
        modifier = Modifier.padding(top = 8.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)) {
        items(lazyContacts) { contact ->
            if(contact != null)
            {
                Contact(contact = contact, onContactClick = {
                    viewModel.addMemberFrom(it) { member ->
                        onContactClick(member)
                    }
                })
            }
        }
    }

这是ViewModel代码:

fun fetchContacts(context: Context): Flow<PagingData<Contact>> {
        return Pager(
            PagingConfig(10, enablePlaceholders = true, initialLoadSize = 20)
        ) {
            ContactsPagingSource(contactManager, context)
        }.flow.cachedIn(viewModelScope)

    }

I am using LazyColumn with Paging 3 to load contacts, when I scroll the list its laggy and sometimes it throws the following exception

java.lang.IllegalStateException: LayoutNode should be attached to an owner
        at androidx.compose.ui.node.LayoutNodeKt.requireOwner(LayoutNode.kt:1407)
        at androidx.compose.ui.node.ModifierLocalConsumerNode.notifyConsumerOfChanges(ModifierLocalConsumerNode.kt:42)

Following is the code for LazyColumn:

val contactsFlow= viewModel.fetchContacts(context)
val lazyContacts = contactsFlow.collectAsLazyPagingItems()
    LazyColumn(
        modifier = Modifier.padding(top = 8.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)) {
        items(lazyContacts) { contact ->
            if(contact != null)
            {
                Contact(contact = contact, onContactClick = {
                    viewModel.addMemberFrom(it) { member ->
                        onContactClick(member)
                    }
                })
            }
        }
    }

Here is the viewModel code:

fun fetchContacts(context: Context): Flow<PagingData<Contact>> {
        return Pager(
            PagingConfig(10, enablePlaceholders = true, initialLoadSize = 20)
        ) {
            ContactsPagingSource(contactManager, context)
        }.flow.cachedIn(viewModelScope)

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

两仪 2025-01-31 12:33:09

当您使用LazyColumn中的项目列表时,您无法使用NULL检查跳过项目。尝试在您的“联系人”中显示一些东西。它可以是“加载”或默认值。

When you use list of items in LazyColumn you can't skip items with null check. Try show something in your "contact". It can be 'Loading' or default value.

软甜啾 2025-01-31 12:33:09

我认为当我尝试在约束布局中使用AnimatedVisibily时,我会遇到同样的崩溃,这是一个错误

I think it's a BUG in compose that I get the same crash when I try to use AnimatedVisibility in ConstraintLayout layout, repeatedly controlling AnimatedVisibility to show and hide

纸短情长 2025-01-31 12:33:09

如果您是Horizo​​ntalPager,请记住PAGERSTATE,请从Androidx.com.pose.found.pager导入它们,而不是com.google.accompanist:cancerist-page

If you youse HorizontalPager, rememberPagerstate, import them from androidx.compose.foundation.pager, not from com.google.accompanist:accompanist-page

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文