Передача пакета в обратном направлении с помощью OnBackPressedCallback

В своем приложении я использую OnBackPressedCallback и вызываю findNavController.popBackStack для управления обратной навигацией. Одно ограничение, с которым я столкнулся, заключается в том, что я не могу найти способ вернуть пакет, который можно получить, когда пользователь нажимает кнопку «Назад».

Сценарий использования прост: фрагмент Пользователь вводит некоторые данные. Он передается фрагменту B, и пользователь вводит еще несколько данных. Пользователь решает вернуться к фрагменту A и отредактировать предыдущие данные, поэтому я хочу передать пакет обратно, чтобы они не потеряли ранее введенные данные.

Используя компонент Navigation, я мог бы просто прикрепить пакет при переходе назад, но с помощью этого OnBackPressCallback мы не используем компонент навигации, поэтому не к чему прикрепить пакет.

Есть ли у кого-нибудь возможные простые решения для этого? Я уже рассматривал SharedPreferences, однако я передаю объект, а SP разрешает только примитивы.


person AndroidDev123    schedule 25.09.2020    source источник


Ответы (1)


Самым простым решением было бы сериализовать ваш пакет в строку JSON, сохранить его в общих настройках, а затем десериализовать его, когда вам нужно получить эти данные.

Есть 2 хорошо известных и надежных библиотеки JSON, если вы еще не используете одну или не знакомы с ней: вы можете использовать либо Gson (Google), либо Moshi (Square).

person 92AlanC    schedule 25.09.2020
comment
Я пытаюсь это сделать. пока что я сделал: val gson = Gson () val json: String = gson.toJson (newCheckIn) viewModel.saveGsonCheckIn (json) - person AndroidDev123; 25.09.2020
comment
Затем в модели просмотра я сделал следующее: fun saveGsonCheckIn (json: String) {editor.putString (CHECKIN, json) editor.apply ()} fun setGsonCheckIn (json: String): CheckIn? {val checkInSaved = sharedPreferences.getString (CHECKIN, json) return gson.fromJson (checkInSaved, CheckIn :: class.java)} - person AndroidDev123; 25.09.2020
comment
Но я изо всех сил пытаюсь вернуть данные из виртуальной машины во фрагмент - person AndroidDev123; 25.09.2020
comment
Боюсь, ваш вопрос не об этом. Вы хотели передать данные назад после нажатия кнопки «Назад», и вам удалось сделать это из того, что кажется. Теперь что касается получения данных из SharedPreferences, это еще одна проблема. - person 92AlanC; 25.09.2020