我想在我的应用程序中使用 ActionBar 中的向上按钮实现导航模式。
我有详细信息活动,在这里我可以来自家、收藏夹和搜索屏幕。我也可以从浏览器打开这个屏幕(处理特定的 url)。当用户按下向上按钮时,我使用 flush() 方法来模拟返回导航。但是对于情况,当用户来自浏览器时,我想打开主屏幕而不是以前的浏览器活动。我如何识别以前的活动来自另一个应用程序并导航到主屏幕?
我想在我的应用程序中使用 ActionBar 中的向上按钮实现导航模式。
我有详细信息活动,在这里我可以来自家、收藏夹和搜索屏幕。我也可以从浏览器打开这个屏幕(处理特定的 url)。当用户按下向上按钮时,我使用 flush() 方法来模拟返回导航。但是对于情况,当用户来自浏览器时,我想打开主屏幕而不是以前的浏览器活动。我如何识别以前的活动来自另一个应用程序并导航到主屏幕?
Up 应该始终导航到 Activity 的层次父级,Back 应该始终暂时导航。
换句话说,您应该保持原样返回。
至于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 的支持库。