IsImeVisible вызывает потерю состоянияAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 IsImeVisible вызывает потерю состояния

Сообщение Anonymous »

Я пытаюсь отслеживать состояние видимости клавиатуры в своем приложении чата, чтобы прокручивать ленивый столбец, содержащий мои сообщения, вниз, когда появляется клавиатура. Для этого я сохраняю WindowInsets.isImeVisible следующим образом:

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

@OptIn(ExperimentalLayoutApi::class)
@Preview(showBackground = true)
@Composable
fun ChatScreen(viewModel: ChatScreenViewModel = ChatScreenViewModel()) {

val messages = viewModel.messageListState
val listState = viewModel.messageListScrollState
val keyboardVisibility = WindowInsets.isImeVisible

Column(.....)
а вот свойства ViewModel для контекста:

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

class ChatScreenViewModel: ViewModel() {

val messageListScrollState = LazyListState()
val textFieldState = mutableStateOf("")
val messageListState = mutableStateListOf(
"dummy message 1",
"dummy message 2",
"dummy message 3",
"dummy message 4"
)
Проблема в том, что всякий раз, когда срабатывает isImeVisible (например, я нажимаю на TextField, появляется клавиатура, я что-то печатаю, а затем скрываю клавиатуру), все состояния, включая textFieldState и messageListState сбрасываются до исходных значений и теряют обновленные значения. Кажется, что даже сохранение значения isImeVisible внутри переменной вызывает проблему, и все возвращается в норму только тогда, когда я полностью удаляю его из своего кода.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/781 ... state-loss
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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