Android 导航到需要额外服务的活动

Android 导航到需要额外服务的活动,android,Android,我的应用程序中有活动A、B和C,它们按顺序流动。如果我在C中实现Up按钮,我希望它返回到B。Eclipse生成的代码存根如下: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // This ID represents the Home or Up butt

我的应用程序中有活动A、B和C,它们按顺序流动。如果我在C中实现Up按钮,我希望它返回到B。Eclipse生成的代码存根如下:

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId())
    {
        case android.R.id.home:
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. Use NavUtils to allow users
            // to navigate up one level in the application structure. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

但是,B希望在其onCreate方法中从A传递额外数据。B和C之间的关系是C允许用户设置一些影响B显示方式的设置。我目前正在处理将C中的更改保存到onPause()中。当用户按下Up键而不是调用navigateUpFromSameTask时,我应该完成()C吗?

我相信您也遇到了类似的问题?本质上,如果要从C返回到B,可能需要再次调用onCreate()。这意味着您从意图中获得的额外内容将不复存在,因此您必须使用类似的方式存储它们。

如果您将从C返回到B,则您的活动将再次创建,如果您使用标准启动模式。onSaveInstanceState将

将活动B的启动模式声明为:

android:launchMode="singleTop"

在AndroidManifest.xml中,如果要返回到活动。请参阅和。

您是否希望这样=>开始活动A=>活动B=>活动C,在这里,您按下向上按钮,返回活动B。是的,我已编辑了我的问题以描述情况。您能否澄清您实际遇到的问题?从这个问题来看,它是不洁的。如果您已通过
startActivityOnResult
启动活动,则只需调用“finish”。当用户按下UP按钮时,设置结果并完成。@jkau我想我的主要问题是我不理解像自动生成的代码存根那样实现“UP”的目的。在我看来,很多活动都会有一些初始化,这些初始化可能需要调用活动无法访问的额外功能。我只是想知道我是否遗漏了什么。可能是打字错误,但我也遇到了同样的情况,我不得不将
单顶启动模式置于活动B(中间一个同时有孩子和家长的模式)。@SarahVessels你完全正确,我更正了答案。活动B的启动模式必须声明为“singleTop”
navigateUpFromSameTask
从C导航到B。但在默认启动模式下,这意味着“创建了类[B]的新实例”。如果B的启动模式声明为“singleTop”,则这意味着只要它位于后堆栈的顶部,它就会返回到现有实例。如果目标活动不在后堆栈顶部(例如导航到),则可以使用。