Reputation: 484
I have updated the Jetpack Compose libraries to version 1.1.0-rc01
and composeOptions.kotlinCompilerExtensionVersion = "1.1.0-rc02"
and the DropdownMenu component has stopped working in the lists with Grids, below I show how I had configured this component:
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 is a composable containing a DropdownMenuItem and a DropdownItemOption inside. And the error returned by the logcat after trying to display the DropdownMenu is the following:
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)
Upvotes: 1
Views: 790
Reputation: 6995
Some important parts are missing from your code snippet, for instance the LazyVerticalGrid
you're talking about, so I can only guess.
If we look at the source of the exception (LazyGrid.kt:451
) we find the following line:
check(measurables.size == rowContent.size)
It seems you are adding more than one composable as the item content in your items()
function, don't do that.
Let's assume we have a LazyVerticalGrid
with a fixed size of three cells.
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
items(myItems) { item ->
MyItem(item)
}
}
Now you want to add a header that spans three cells, so it takes the full width of the grid.
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
item(
span = { GridItemSpan(3) }
) {
MyHeader()
Divider() // This will cause the error
}
items(myItems) { item ->
MyItem(item)
}
}
Instead always wrap multiple composables in a container.
LazyVerticalGrid(
cells = GridCells.Fixed(3)
) {
item(
span = { GridItemSpan(3) }
) {
Column { // Fix
MyHeader()
Divider()
}
}
items(myItems) { item ->
MyItem(item)
}
}
This answer relates to Jetpack Compose version 1.1.0-rc01
.
Upvotes: 1