首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DropdownMenu在试图在LazyVerticalGrid中打开它时会出错

DropdownMenu在试图在LazyVerticalGrid中打开它时会出错
EN

Stack Overflow用户
提问于 2022-01-21 15:30:53
回答 1查看 439关注 0票数 1

我已经将Jetpack组合库更新为1.1.0-rc01composeOptions.kotlinCompilerExtensionVersion = "1.1.0-rc02"版本,DropdownMenu组件已经停止在网格列表中工作,下面我将展示如何配置该组件:

代码语言:javascript
复制
        MaterialTheme(shapes = MaterialTheme.shapes.copy(medium = RoundedCornerShape_16)) {

            vm.isResident(villager.fileName)
            vm.isVillager(villager.fileName)

            DropdownMenu(
                expanded = expanded.value,
                onDismissRequest = { expanded.value = false }
            ) {

                DropdownVillagers(
                    vm = vm,
                    villager = villager,
                    onItemClicked = { onItemClicked() },
                    isResidentChanged = isResidentChanged,
                    isFavouriteChanged = isFavouriteChanged,
                    onDismiss = { expanded.value = false }
                )

            }

        }

DropdownVillagers是一个可组合的,里面包含一个DropdownMenuItem和一个DropdownItemOption。logcat试图显示DropdownMenu后返回的错误如下:

代码语言:javascript
复制
java.lang.IllegalStateException: Check failed.
        at androidx.compose.foundation.lazy.LazyGridKt$ItemRow$2.measure-3p2s80s(LazyGrid.kt:451)
        at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
        at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1798)
        at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:121)
        at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
        at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
        at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
        at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1317)
        at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.kt:1313)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:170)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201)
        at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:662)
        at androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default(Owner.kt:182)
        at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:846)
        at android.view.View.draw(View.java:22647)
        at android.view.View.updateDisplayListIfDirty(View.java:21519)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21475)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21475)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21475)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21475)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:4421)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4149)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3309)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2126)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8653)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
        at android.view.Choreographer.doCallbacks(Choreographer.java:845)
        at android.view.Choreographer.doFrame(Choreographer.java:780)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7839)
EN

回答 1

Stack Overflow用户

发布于 2022-01-31 15:01:38

您的代码片段中缺少一些重要的部分,例如您正在谈论的LazyVerticalGrid,因此我只能猜测。

如果我们查看异常的来源(LazyGrid.kt:451),我们会发现以下一行:

代码语言:javascript
复制
check(measurables.size == rowContent.size)

您似乎要在items()函数中添加多个可组合的项内容,不要这样做。

假设我们有一个固定大小为三个单元的LazyVerticalGrid

代码语言:javascript
复制
LazyVerticalGrid(
  cells = GridCells.Fixed(3)
) {

  items(myItems) { item ->
    MyItem(item)
  }
}

现在您想要添加一个跨越三个单元格的标题,这样它就获得了网格的全部宽度。

代码语言:javascript
复制
LazyVerticalGrid(
  cells = GridCells.Fixed(3)
) {

  item(
    span = { GridItemSpan(3) }
  ) {
    MyHeader()
    Divider() // This will cause the error
  }

  items(myItems) { item ->
    MyItem(item)
  }
}

相反,始终将多个可组合性包装在一个容器中。

代码语言:javascript
复制
LazyVerticalGrid(
  cells = GridCells.Fixed(3)
) {

  item(
    span = { GridItemSpan(3) }
  ) {
    Column { // Fix
      MyHeader()
      Divider()
    }
  }

  items(myItems) { item ->
    MyItem(item)
  }
}

这个答案涉及到Jetpack撰写版本的1.1.0-rc01

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70803762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档