Использование RememberSaveable с MutableStateListOfAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Использование RememberSaveable с MutableStateListOf

Сообщение Anonymous »

Я пытаюсь добавить изменяемый список объектов, которые можно разделить, в свой составной объект. Я также хочу иметь возможность добавлять и удалять объекты из него.
Сейчас я использую что-то вроде этого:

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

val names = remember { mutableStateListOf() }

names.add("Bill")
names.remove("Bill")
Теперь я хочу, чтобы этот список сохранился при изменении конфигурации, поэтому, возможно, было бы неплохо использовать RememberSaveable. Возможно, что-то вроде этого:

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

val names = rememberSaveable { mutableStateListOf() }

names.add("Bill")
names.remove("Bill")
Но это не работает, выдает следующее исключение:

androidx.compose.runtime.snapshots.SnapshotStateList не может быть сохранен
с использованием текущего SaveableStateRegistry. Реализация по умолчанию
поддерживает только типы, которые можно хранить внутри Bundle. Пожалуйста,
рассмотрите возможность реализации собственного Saver для этого класса и передайте его в
rememberSaveable().

Это означает, что SnapshotStateList< /code> (результат mutableStateListOf) невозможно сохранить.
Пока я могу придумать несколько способов обойти эту проблему:
  • Фактически реализация сохранения для SnapshotStateList.
  • Использование чего-то вроде val nameState = RememberSaveable { mutableStateOf(listOf()) } .
    Это действительно работает безупречно, однако обновление списка требует установки значения, что является одновременно медленным и неудобным (например, nameState.value = nameState.value + "Joe" для простого добавления один элемент).
Оба этих способа кажутся слишком сложными для, казалось бы, небольшой задачи. Мне интересно, как лучше всего сделать то, что я хочу. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/688 ... tatelistof
Ответить

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

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

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

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

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