Вернитесь в MainActivity из любой активности с флагом
Я хочу вернуться к MainActivity из любой деятельности. Например, мой стек действий: A - B - C - D. A (MainActivity) находится внизу, а D - вверху стека.
Когда я использую android:launchMode="singleTask"
, Я могу вернуться к А в любой деятельности, как я ожидал.
Но когда я использую флаг FLAG_ACTIVITY_NEW_TASK
(без launchMode="singleTask"), он не работает должным образом, он открывает новую активность. И стеки: A - B - C - D - A не так, как написано в документе:
FLAG_ACTIVITY_NEW_TASK
Начните упражнение в новом задании. Если задача уже запущена для действия, которое вы сейчас запускаете, эта задача переводится на передний план с ее последним восстановленным состоянием, и действие получает новое намерение в onNewIntent().Это приводит к тому же поведению, что и значение launchMode "singleTask", обсуждавшееся в предыдущем разделе.
Кто-нибудь знает причину? Благодарю.
5 ответов
Я надеюсь, что это решение решит вашу проблему::- Только установите это Intent
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
Найти решение:
Примечание: это очистит все предыдущие действия и запустит HomeActivity
Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(homeActivity);
Override onBackpress
метод каждого вида деятельности:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Попробуйте это в одном. Вы можете добавлять и удалять действия из стека, как это.
// Add activity
public static void addActivities(String actName, Activity _activity) {
if (Config.screenStack == null)
Config.screenStack = new HashMap<String, Activity>();
if (_activity != null)
Config.screenStack.put(actName, _activity);
}
// Remove Activity
public static void removeActivity(String key) {
if (Config.screenStack != null && Config.screenStack.size() > 0) {
Activity _activity = Config.screenStack.get(key);
if (_activity != null) {
_activity.finish();
}
}
}
Пользователь добавляет действия перед setContentView для добавления в стек.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addActivities("DemoActivity", DemoActivity.this)
setContentView(R.layout.activity_create_feed_post);
}
Для удаления активности вы просто вызываете removeActivity() и передаете ключ, который вы используете при добавлении действия.
Вы должны использовать приведенный ниже код, чтобы перейти на MainActivity. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
следующий флаг намерения очищает все предыдущие действия.
Intent intent = new Intent(this, DashboardActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Обратите внимание на одну вещь, которую вы использовали android:launchMode="singleTask"
Таким образом, при переходе от действия к другому, вы должны завершить действие, используя this.finish()
метод.