Кнопка ActionBar Up и шаблон навигации

Я хочу реализовать шаблон навигации в своем приложении с кнопкой "Вверх" в ActionBar.

У меня есть подробная активность, здесь я могу приехать из дома, в избранное и на экран поиска. Также я могу открыть этот экран из браузера (обрабатывая определенный URL). Когда пользователь нажимает кнопку "Вверх", я использую метод flush() для эмуляции обратной навигации. Но для случая, когда пользователь пришел из браузера, я хочу открыть главный экран вместо предыдущей активности браузера. Как я могу узнать, что предыдущая активность была из другого приложения и перейти на главный экран?

Ответ 1

Вверх. Всегда следует переходить к иерархическому родительскому элементу активности, а Back всегда должен временно перемещаться.

Другими словами, вы должны оставить Назад, как есть.

Что касается Up, он всегда должен идти туда же, независимо от того, откуда он. Поэтому, если вы обычно приходите в DetailsActivity из YourListActivity, Up должен всегда идти туда независимо от того, откуда вы пришли. Самое вероятное место зависит от вашего усмотрения, но оно всегда должно быть одинаковым.

Если вы перейдете к операции с деталями из ненормального местоположения (например, в браузере, другом действии, виджетах или уведомлении), вы должны воссоздать стек задач, чтобы навигация, используя результаты по тому же пути. Вот пример тренинга для разработчиков Android:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Intent upIntent = new Intent(this, YourListActivity.class);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            // This activity is not part of the application task, so
            // create a new task
            // with a synthesized back stack.
            TaskStackBuilder
                    .from(this)
                    .addNextIntent(new Intent(this, HomeActivity.class))
                    .addNextIntent(upIntent).startActivities();
            finish();
        } else {
            // This activity is part of the application task, so simply
            // navigate up to the hierarchical parent activity.
            NavUtils.navigateUpTo(this, upIntent);
        }
        return true;
    }
}

Вот тренировка Android по внедрению навигации

(http://developer.android.com/training/implementing-navigation/index.html).

Вам понадобится библиотека поддержки для NavUtils и TaskStackBuilder.