如何导航到不在后台堆栈上的父活动?

时间:2016-04-03 21:33:23

标签: android

我正在尝试导航到父活动。如果父活动位于后台堆栈的顶部,则它可以正常工作。如果父活动不在后台堆栈上,使用NavUtils导航只会返回上一个活动。

我的应用程序的最低SDK为16。

清单摘录:

<activity
        android:name=".activities.ParentActivity"
        android:label="@string/title_activity_parent"
        android:theme="@style/AppTheme.NoActionBar"
        android:launchMode="singleTop"/>
<activity
        android:name=".activities.ChildActivity"
        android:label="@string/title_activity_child"
        android:parentActivityName=".activities.ParentActivity">

ChildActivity的代码段:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent();
                intent.setClass(this, ParentActivity.class);
                NavUtils.navigateUpTo(this, intent);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

我尝试了几种不同的方法来实现导航,但没有一种解决了这个问题。将ParentActivity的启动模式更改为“标准”也不起作用。

1 个答案:

答案 0 :(得分:1)

NavUtils.navigateUpTo(Intent)如果不在堆栈中,则不会创建父活动。您的最小API为16,因此您可以直接调用堆栈导航方法而无需使用支持类。

在你的情况下,你应该调用onNavigateUp()方法。如果您想要自定义向上导航,您还可以覆盖shouldUpRecreateTask(Intent)onPrepareNavigateUpTaskStack(TaskStackBuilder)。如果shouldUpRecreateTask(Intent)返回true,则如果父活动在堆栈中不存在,则将创建父活动。