2012-05-25 97 views
12

我想在我的應用程序中使用ActionBar中的向上按鈕來實現Navigation PatternActionBar向上按鈕和導航模式

我有詳細信息活動,在這裏我可以從家裏,收藏夾和搜索屏幕。我也可以從瀏覽器打開這個屏幕(處理特定的網址)。當用戶按向上按鈕時,我使用flush()方法來模擬返回導航。但是,對於用戶來自瀏覽器的情況,我想打開主屏幕而不是以前的瀏覽器活動。我怎麼能認識到,以前的活動來自另一個應用程序,並導航到主屏幕?

回答

20

上一步應始終導航到該活動的層次結構父級,並且後退應總是臨時導航。

換句話說,你應該保持原樣。

至於Up,無論它來自哪裏,它都應該始終走到同一個地方。因此,如果您通常從YourListActivity來到DetailsActivity,那麼無論您來自哪裏,Up都應該到達那裏。最可能的地方是你自己決定的,但它應該始終如一。

如果您從非正常位置(如瀏覽器,其他活動,窗口小部件或通知)來到Details Activity,您應該重新創建任務堆棧,以便導航使用相同的路徑。下面是從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'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

使用此方法時,父級活動會丟失所有附加項和狀態。你有沒有辦法恢復它的狀態?根據指南(http://developer.android.com/design/patterns/navigation.html)的 – sarunw

+2

,當通知將您置入應用程序深處時,不應該暫時導航。查看Gmail或日曆示例。 – Maragues

+0

@art你可以嘗試我的解決方案:http://stackoverflow.com/a/20306670/878126 –