2012-05-25 2 views
12

Я хочу реализовать Navigation Pattern в своем приложении с кнопкой «Вверх» в ActionBar.Кнопка ActionBar Up и схема навигации

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

ответ

20

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

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

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

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

@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's 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's 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.

+8

При использовании этого метода родительская активность потеряет все дополнительные функции и состояние. У вас есть все равно, чтобы восстановить его состояние? – sarunw

+2

в соответствии с рекомендациями (http://developer.android.com/design/patterns/navigation.html), назад не следует перемещаться по времени, когда уведомление помещает вас глубоко в приложение. См. Примеры gmail или календаря. – Maragues

+0

@art вы можете попробовать свое решение: http://stackoverflow.com/a/20306670/878126 –

Смежные вопросы