Данные, которые я выбрал на 1-м экране, исчезли, когда я вернусь к 1-му экрану со 2-го экрана. Я хочу, чтобы эти данные по-прежнему отображались. Как мне это сделать. Был способ сделать это, но я точно не помню, поэтому я должен спросить.
Кстати, я делаю это в Котлине.
Например
1- ввожу значения на первом экране
2- переключаюсь на второй экран с помощью кнопки
3- возвращаюсь на первый экран с помощью кнопки со второго
экран и значения, которые я ввел, исчезли.
фотографий
и когда я вернусь
Вы используете NavigationComponent
? Я полагал, что вы сделали. По умолчанию NavigationComponent
заменяет предыдущий фрагмент при переходе к другому фрагменту. Это уничтожит представление предыдущего фрагмента, но не сам фрагмент. Когда вы переходите назад, указанное представление создается заново, поэтому его состояние сбрасывается. Чтобы сохранить состояние представления, вы можете использовать сам фрагмент, ViewModel
, сохраненное состояние экземпляра или событие с использованием постоянных данных в зависимости от ваших вариантов использования. Чтобы понять это поведение, вы можете больше узнать о жизненном цикле фрагмента и жизненном цикле активности.
Вы также можете узнать больше о сохранении состояний пользовательского интерфейса в разделе документации Android Сохранение состояний пользовательского интерфейса.
Вы можете просто использовать общие настройки, но в зависимости от типа данных не волнуйтесь, у меня есть и то, и другое.
это для примитивных типов данных
Хранить в SharedPreference (ваше первое действие):
val preference=getSharedPreferences(preference_name, Context.MODE_PRIVATE)
val editor=preference.edit()
editor.putBoolean("isLoggedIn",true)
editor.putInt("id",1)
editor.putString("name","Alex")
editor.commit()
Получить из SharedPreference (также в вашем первом действии, но мы проверяем, является ли общий ресурс нулевым или нет, если это не так, мы получаем данные, которые мы сохранили ранее)
if (preference != null){
val name = preference.getString("name", "")
val id = preference.getInt("id", 0)
val isLoggedIn = preference.getBoolean("isLoggedIn", false)
}
и это для очистки значений общего предпочтения:
Context.MODE_PRIVATE).edit().clear().apply();
второй тип данных - это ваш пользовательский объект, другими словами, ваш созданный класс, и для этого вам нужно использовать библиотеку Gson, которая преобразует ваш POJO в строку, а затем преобразует строку в JSON, при получении вашего объекта он будет обратный алгоритм:
это зависимость GSON для преобразования:
//Gson
implementation 'com.google.code.gson:gson:2.8.9'
Магазин в Gson SharedPreference:
val sharedPreferencesToJson =
getSharedPreferences(
"preference_name", Context.MODE_PRIVATE
)
val object = Customer() // your object what ever it is
object.cMobile = mobile
object.cImage = imageUri.toString()
val edit = sharedPreferencesToJson.edit()
val gsonCustomer = Gson()
val json = gsonCustomer.toJson(`object`)
edit.putString(/*your object lable*/, json)
edit.apply()
Получить из Gson SharedPreference:
val sharedPreferences =
getSharedPreferences(
"preference_name", MODE_PRIVATE
)
val gson = Gson()
if (sharedPreferences != null)
{
val json: String = sharedPreferences.getString(/*your object lable*/, "")!!
object = gson.fromJson(json, Customer::class.java)
}
Очистить Gson SharedPreference:
this.getSharedPreferences(Constants.MY_SHOP, Context.MODE_PRIVATE).edit().clear().apply();
Лучшим подходом будет использование ViewModel для сохранения текущего состояния вашей активности и повторного извлечения этого значения из ViewModel, когда вы вернетесь.