Вывести уже прекращенную деятельность на фронт - PullRequest
0 голосов
/ 25 августа 2018

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

например:

  • Пользователь открывает имя класса активности CityActivity для (X информация о городе).
  • Затем внутри (X city) он открыл еще одно CityActivity для (Y city info).
  • Затем внутри (Y city) он открыл еще одно CityActivity для (Z city info).

Теперь внутри (Z city) CityActivity, если он нажимает на кнопку, чтобы открыть (X city info), мне нужно проверить, есть ли еще CityActivity для X city и перенести его на передний план, иначе создайте его.

Я хочу, чтобы решение для этого сценария не менялось с фрагментами или чем-то еще.

Если Android не поддерживает метод для этого, как вывести Activity из ссылки на передний план, что-то вроде:

mCityActivity.foreground();

или

context.toForeground(mCityActivity);

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы не можете так делать.Как вы уже заметили, Android не может найти конкретный экземпляр Activity, если у вас есть несколько экземпляров одного и того же Activity в вашей задаче.Ваша архитектура в любом случае несовершенна, так как она не масштабируется, и вы уже видели, что не можете делать то, что хотите.

Правильный способ сделать это - не создавать несколько экземпляров вашего Activity на всех.Когда пользователь хочет перейти из X City в Y City, вам просто нужно изменить данные в существующем экземпляре Activity с показа X на показ Y. Используйте внутренний стек, чтобы запомнить навигацию, и протолкните объект, представляющий «X».в стек.Теперь, когда пользователь перемещается из Y City в Z City, вы помещаете объект, представляющий «Y», в стек и загружаете данные для Z City в представления.Когда пользователь нажимает кнопку НАЗАД.вы просто вытаскиваете верхний объект из стека и снова используете его для загрузки данных предыдущего города в представления.Когда пользователь нажимает BACK и стек пуст, вы просто вызываете finish() на Activity.

. Эта архитектура полностью масштабируема.Пользователь может пересекать столько городов, сколько захочет, и даже многократно перемещаться между двумя городами.У вас никогда не будет утечки памяти или переполнения стека, поскольку у вас есть только один экземпляр Activity.

0 голосов
/ 26 августа 2018

вы можете использовать этот флаг: FLAG_ACTIVITY_REORDER_TO_FRONT

Intent intent = new Intent(currentActivity.this,
       anotherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
...