Вернитесь в 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() метод.

Другие вопросы по тегам