2012-05-25 61 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 –