我已经将Jetpack组合库更新为1.1.0-rc01和composeOptions.kotlinCompilerExtensionVersion = "1.1.0-rc02"版本,DropdownMenu组件已经停止在网格列表中工作,下面我将展示如何配置该组件:
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后返回的错误如下:
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)发布于 2022-01-31 15:01:38
您的代码片段中缺少一些重要的部分,例如您正在谈论的LazyVerticalGrid,因此我只能猜测。
如果我们查看异常的来源(LazyGrid.kt:451),我们会发现以下一行:
check(measurables.size == rowContent.size)您似乎要在items()函数中添加多个可组合的项内容,不要这样做。
假设我们有一个固定大小为三个单元的LazyVerticalGrid。
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
items(myItems) { item ->
MyItem(item)
}
}现在您想要添加一个跨越三个单元格的标题,这样它就获得了网格的全部宽度。
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
item(
span = { GridItemSpan(3) }
) {
MyHeader()
Divider() // This will cause the error
}
items(myItems) { item ->
MyItem(item)
}
}相反,始终将多个可组合性包装在一个容器中。
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
item(
span = { GridItemSpan(3) }
) {
Column { // Fix
MyHeader()
Divider()
}
}
items(myItems) { item ->
MyItem(item)
}
}这个答案涉及到Jetpack撰写版本的1.1.0-rc01。
https://stackoverflow.com/questions/70803762
复制相似问题