转到父活动而不启动它

时间:2015-01-30 17:54:12

标签: android android-activity

我正在尝试对root活动功能实施“返回”。

我的ActionBar设置

setDisplayHomeAsUpEnabled(true);

在我的清单中,我已经设置了

<activity
        android:name=".Activity2"
        android:label="@string/title_activity2"
        android:parentActivityName=".Activity1">
        <meta-data android:name="android.support.PARENT_ACTIVITY"
            android:value=".Activity1"/>
</activity>

如果我将应用程序启动到Activity1并启动Activity2,则会出现左上角的后退箭头并将我带回Activity1。

问题在于通过通知我可以直接启动Activity2,当我尝试使用后退按钮时,我最终会在主屏幕上显示。

所以我搜索了这个问题并找到了(http://developer.android.com/training/implementing-navigation/ancestral.html

它说在onOptionsItemSelected

中实现的地方
 public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    Log.d("Writing Activity","OnOptionsItemSelected entered");
    int id = item.getItemId();
    boolean handled = true;
    Log.d("Writing Activity","OnOptionsItemSelected id: "+id);
    switch (id) {
        case R.id.action_save:
            saveFile();
            break;
        case R.id.action_delete:
            deleteFile();
            break;
        case R.id.action_help:
            help();
            break;
        case R.id.up:
        case R.id.home:

            Log.d("Writing Activity","OnOptionsItemSelected Home");
            Intent upIntent = NavUtils.getParentActivityIntent(this);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                Log.d("Writing Activity","OnOptionsItemSelected 1");
                // This activity is NOT part of this app's task, so create a new task
                // when navigating up, with a synthesized back stack.
                TaskStackBuilder.create(this)
                        // Add all of this activity's parents to the back stack
                        .addNextIntentWithParentStack(upIntent)
                                // Navigate up to the closest parent
                        .startActivities();
            } else {
                Log.d("Writing Activity","OnOptionsItemSelected 2");
                // This activity is part of this app's task, so simply
                // navigate up to the logical parent activity.
                NavUtils.navigateUpTo(this, upIntent);
            }
            break;
        default:
            Log.d("Writing Activity","OnOptionsItemSelected default");
            handled = super.onOptionsItemSelected(item);
    }


    return handled;
}

这对我来说似乎合乎逻辑,但它没有成功。

有什么我错过的吗?

更新:我记录了该方法,似乎根本没有输入案例R.id.home并转到默认语句。但是当我抓住所选项目的ID时,我得到16908332,这对应于家...? -

2 个答案:

答案 0 :(得分:0)

好的不是问题的答案,而是一个让它按照我想要的方式运作的解决方案。

不是从通知中直接将其路由到Activity2,而是在调用setContentView方法之前启动Activity1并在intent start Activity2中使用额外的参数。 这使它看起来像是直接启动到Activity2。

然后我还必须删除额外的intent参数。 如果我没有做到这一点,那么如果我稍后再次从应用程序历史记录中打开应用程序,旧的意图将保留并重新运行。

答案 1 :(得分:0)

好吧,似乎上述问题的真正答案是切换案例不是因为我使用R.id.home而不是android.R.id.home。

如果我改变它,它会命中开关并且作业可以从那里继续。