Jetpack Compose ModalBottomSheet автоматически закрывается при редактировании текстовых полей в интерактивном режиме преAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Jetpack Compose ModalBottomSheet автоматически закрывается при редактировании текстовых полей в интерактивном режиме пре

Сообщение Anonymous »

У меня возникла проблема с ModalBottomSheet Jetpack Compose в режиме интерактивного предварительного просмотра Android Studio. Хотя нижний лист работает отлично при запуске на устройстве или в эмуляторе, в интерактивном предварительном просмотре он ведет себя по-другому.
Проблема:
Когда отображается ModalBottomSheet и я пытаюсь отредактировать любой TextField внутри него, нижний лист автоматически закрывается. Это происходит только в режиме интерактивного предварительного просмотра.
Вот моя текущая реализация:

Код: Выделить всё

data class User(val firstName: String, val lastName: String)

@Composable
fun UserEditor(
user: User,
onUserChanged: ((User) -> Unit)?
){
var firstName by remember { mutableStateOf(user.firstName) }
var lastName by remember { mutableStateOf(user.lastName) }

Column(
modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(10.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
OutlinedTextField(
value = firstName,
onValueChange = { firstName = it },
label = { Text("First Name") }
)

OutlinedTextField(
value = lastName,
onValueChange = { lastName = it },
label = { Text("Last Name") }
)

TextButton(
onClick = {
onUserChanged?.invoke(User(firstName, lastName))
}
) { Text("Update")}
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Preview(showBackground = true)
@Composable
fun UserEditorModalBottomSheetPreview(){
var showUserEditor by remember { mutableStateOf(false) }
var user by remember { mutableStateOf(User("Abc", "Def")) }

AppTheme {

Box(Modifier.fillMaxSize()) {
Text("firstName = ${user.firstName} \nlast Name = ${user.lastName}", Modifier.align(Alignment.Center))
TextButton(
onClick = { showUserEditor = true }
) { Text("Edit") }

}

if(showUserEditor){
ModalBottomSheet(
modifier = Modifier.fillMaxSize(),
onDismissRequest = { showUserEditor = false }
){
UserEditor(
user = user,
onUserChanged = {
user = it
showUserEditor = false
}
)
}
}
}

}
Изображение

Код отлично работает на реальных устройствах и эмуляторах. Проблема возникает только в режиме интерактивного предварительного просмотра Android Studio. Нижний лист закрывается, как только TextField получает фокус.
Среда:
  • Выпадение функций Android Studio Koala | 2024.1.2
  • Составить спецификацию 2024.10.01
Это ожидаемое поведение в интерактивном режиме?

Подробнее здесь: https://stackoverflow.com/questions/792 ... text-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»