可点击切换不断重复导致搜索栏中的 UI 故障 - Jetpack Compose Android Studio Kotlin

Clickable Toggle Continuously Repeating Causing UI Glitch in Search Bar - Jetpack Compose Android Studio Kotlin

我试图让文本字段在选择“搜索电影”按钮时出现,在未选择时消失。

当我点击“搜索电影”按钮时,该应用程序似乎一直在识别点击。

这是一段视频,展示了它的样子:https://youtu.be/5LQ8k0Y05Cc

您可以看到,选择“流行电影”按钮时也不会消失。

这是可组合函数:

@Composable
                    fun MaterialButtonToggleGroup() {
                        val options = listOf(
                            "Popular Movies",
                            "Search Movies"
                        )
                        var selectedOption by remember {
                            mutableStateOf("")
                        }
                        val onSelectionChange = { text: String ->
                            selectedOption = text
                        }
                        Column() {
                            var isExpanded by remember { mutableStateOf(false) }

                            Row(
                                horizontalArrangement = Arrangement.SpaceEvenly,
                                modifier = Modifier.fillMaxWidth(),
                            ) {
                                options.forEach { text ->
                                    Row(
                                        modifier = Modifier
                                            .padding(
                                                vertical = 8.dp,
                                            ),
                                    ) {
                                        Text(
                                            text = text,
                                            style = typography.body1.merge(),
                                            color = Color.White,
                                            modifier = Modifier
                                                .clip(
                                                    shape = RoundedCornerShape(
                                                        size = 12.dp,
                                                    ),
                                                )
                                                .clickable {
                                                    onSelectionChange(text)
                                                }
                                                .background(
                                                    if (text == selectedOption) {
                                                        Color.Magenta
                                                    } else {
                                                        Color.Gray
                                                    }
                                                )
                                                .padding(
                                                    vertical = 12.dp,
                                                    horizontal = 16.dp,
                                                ),
                                        )
                                    }
                                }
                            }
                            if (selectedOption == "Search Movies") {
                                isExpanded = !isExpanded
                            }
                            if (isExpanded) {
                                var text by remember { mutableStateOf("") }

                                OutlinedTextField(
                                    value = text,
                                    modifier = Modifier.fillMaxWidth()
                                        .padding(all = 3.dp),
                                    onValueChange = { text = it },
                                    label = { Text("Enter Movie Info") }
                                )
                            }
                        }
                        (activity as MainActivity?)?.viewSelection(selectedOption)
                    }
                    Surface {
                        MaterialButtonToggleGroup()
                    }

原来我应该为每个场景将 isExpanded 设置为 truefalse

我改了:

if (selectedOption == "Search Movies") {
                            isExpanded = !isExpanded
                        }
                        if (isExpanded) {
                            var text by remember { mutableStateOf("") }

                            OutlinedTextField(
                                value = text,
                                modifier = Modifier.fillMaxWidth()
                                    .padding(all = 3.dp),
                                onValueChange = { text = it },
                                label = { Text("Enter Movie Info") }
                            )
                        }

收件人:

if (selectedOption == "Search Movies") {
                                isExpanded = true
                            } else {
                                isExpanded = false
                            }
                            if (isExpanded) {
                                var text by remember { mutableStateOf("") }

                                OutlinedTextField(
                                    value = text,
                                    modifier = Modifier
                                        .fillMaxWidth()
                                        .padding(all = 3.dp),
                                    onValueChange = { text = it },
                                    label = { Text("Enter Movie Info") }
                                )
                            }