Java. Как использовать переменные других Activity?
Пишу приложение под android. У меня есть 3 класса: MainActivity, SecondActivity, FinalActivity.
В классе FinalActivity мне нужно использовать переменную firstVar из класса MainActivity и переменную secondVar из класса secondActivity.
Напишите пожалуйста как мне это сделать.
Ответы (2 шт):
Я бы советовал использовать отдельный класс в котором будет необходимая вам переменная. Такие классы используют паттерн синглтона и работает это так. Создаем класс-синглтон:
public class Single {
private static final Single INSTANCE = new Single();
private Single(){}
public static Single getInstance(){
return INSTANCE;
}
}
дальше добавляем переменную в этот класс, например такую:
String test = "";
Дальше в нужной вам активности сетим переменной значение:
Single().getInstance().test = "some_data"
и дальше там где вам нужно можно вытащить эту переменную:
Single().getInstance().test
Что такое Activity? Activity это отдельный экран, с которым взаимодействует пользователь. Этот экран может вести на множество других экранов. На этот экран так же можно попасть с множества других мест.
Теперь представим ситуацию. У вас есть активити A и активити В. Флоу такой, пользователю показывается экран A и при нажатии на кнопку он попадает на экран В. Вы решили что в активити В нужна какая-то переменная из активити A. Вы сделали ее public, получили к ней доступ и успешно ее используете.
Через неделю к вам приходит заказчик и говорит, я хочу сделать deeplink который будет вести пользователя сразу на активити В, он там совершит какие-то действия и приложения закроется или пойдет по какому-то другому флоу. Вам придется подымать активити A для того чтоб работала активити В.
А потом этот же заказчик попросит вас вообще перенести кнопку перехода из активити A в активити В в активти С (С открывает В). И вам придется еще лезть в какие-то переменные и переносить их и изменять ваш код.
Вывод. Экраны должны быть максимально независимы друг от друга. В идеале они не должны знать ничего друг о друге, максимум это то как открыть другую активити. Все! Ни о каких методах или переменных они знать не должны!
Как быть если надо из активити A передать какие-то параметры в активити В? Решений много:
синглтон который живет на протяжении всего приложения и никак не связан на жизненный цикл Активити.
база данных. Активти A передает в активити В только id вашего объекта и активити В сама его открывает.
Presenter-ы и ViewModel-и.
В общем любая другая сущность которая живет отдельно от активити и чья зона ответственности "Хранить данные"