1

我正在尝试LazyColumn在警报对话框中显示一个,以便用户可以在项目列表之间进行选择,然后单击它。警报对话框将毫无问题地显示,我可以单击屏幕上的任何项目并将其关闭,但是一旦我尝试在项目之间滚动,它将给出以下错误:

E/InputEventReceiver: Exception dispatching input event.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.app, PID: 22418
    java.lang.IllegalArgumentException: Failed requirement.
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:177)
        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.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1073)
        at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1059)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:913)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1957)
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:1162)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:871)
        at android.view.View.dispatchPointerEvent(View.java:15458)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7457)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7233)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6595)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6652)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6618)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6786)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6626)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6843)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6599)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6652)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6618)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6626)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6599)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9880)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9718)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9671)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10014)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
        at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
        at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
        at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:9960)
        at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:10056)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
        at android.view.Choreographer.doCallbacks(Choreographer.java:809)
        at android.view.Choreographer.doFrame(Choreographer.java:737)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8595)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
I/Process: Sending signal. PID: 22418 SIG: 9

这是AlertDialog代码:

AlertDialog(
    onDismissRequest = { showDialog.value = false },
    modifier = Modifier.fillMaxHeight(.80f),
    text = {
        LazyColumn{
            items(30){ i ->
                Text(text = i.toString())
            }
        }
    },
    buttons = {
            Button(onClick = { /*TODO*/ }) {
                Text(text = "Cancel")
            }
    }
)
4

1 回答 1

0

虽然我发现如果我使用 Material3 库滚动不再是问题,但我也遇到了同样的问题:

实现“androidx.compose.material3:material3:1.0.0-alpha03”

AlertDialog(
        onDismissRequest = { },
        modifier = Modifier.fillMaxHeight(0.8f),
        text = {
            LazyColumn() {
                items(30) { i ->
                    Text(text = i.toString())
                }
            }
        },
        dismissButton = {
            Button(onClick = { /*TODO*/ }) {
                Text(text = "Cancel")
            }
        }
    )

确保导入:

导入 androidx.compose.material3.AlertDialog

我不知道这是否是正确的答案,但我希望它在任何情况下都有帮助。

于 2022-01-25T19:09:13.570 回答