Активность создается снова, когда я хочу вывести существующую на передний план
Я добавил флаг REORDER_TO_FRONT, чтобы поднять мою существующую активность вместо создания нового экземпляра. Но он вызывает метод действия onCreate вместо onNewIntent в MainActivity. Если я добавлю launchMode="singleTop" в Menifest, то работает нормально. Но я не хочу добавлять singleTop, потому что в некоторых случаях в свернутом режиме, если пользователь нажимает на значок приложения, приложение перезапускается, а не возобновляется с того же места.
Intent intent = MainActivity.newIntent(context);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Спасибо
3 ответа
Вам просто нужно добавить флаг SINGLE_TOP к вашему Intent
, как это:
Intent intent = MainActivity.newIntent(context);
intent.addFlags(Intent.SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Это удалит все действия из стека обратно в существующий экземпляр MainActivity
, Это НЕ создаст новый экземпляр MainActivity
или позвоните по телефону onCreate()
, Будет звонить onNewIntent()
в MainActivity()
,
Если вы хотите закрыть все остальные действия и начать только основное действие, это должно работать для вас:
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Надеюсь, что это может помочь:)
Нет необходимости очищать текущую активность и показывать предыдущую активность. Просто используйте finish()
метод, как показано ниже:
Вы можете использовать это на своем onBackPressed()
а также toolbar
нажатие кнопки назад:
Используйте этот код снаружи onCreate()
:
@Override
public void onBackPressed() {
finish(); //closes current activity
}
На toolbar
:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); //close current activity
}
});
onBackPressed()
Метод вызывается при нажатии кнопки "Назад" на Android. Значение по умолчанию super.onBackPressed()
который также называет finish()
метод! Этот пример был только для справки.
toolbar.setNavigationOnClickListener(...)
Метод вызывается при нажатии кнопки "Назад" на панели инструментов. Но для этого вы должны добавить эти строки в коде в onCreate()
метод:
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
finish()
Метод удаляет текущую активность из backstack и показывает предыдущую активность, сохраненную в backstack!