无法向上导航至 Main activity

Cannot navigate up to Main activity

我的申请中有 3 个活动(A -main activity-、B 和 C)。从 activity A 我可以导航到 B,从 B 到 activity C。

当按下后退按钮(或单击向上导航按钮)时,当前 activity 完成并且父级 activity 启动(A 是 B 父级,B 是 C 父级):

    <activity
        android:name=".A"
        android:label="@string/app_name"
        android:noHistory="true"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".B"
        android:label="@string/title_b"
        android:noHistory="true"
        android:parentActivityName=".A"
        android:theme="@style/AppTheme.NoActionBar">

        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.sim.muii.camarerocamarero.A" />
    </activity>
    <activity
        android:name=".C"
        android:label="@string/title_c"
        android:noHistory="true"
        android:parentActivityName=".B">

        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.sim.muii.camarerocamarero.B" />
    </activity>

如果我从 A 向下导航到 B,然后 return 到 A(通过向上导航),它可以正常工作。但是,如果我从 A 转到 B,然后从 B 转到 C,它允许我 return 转到 B,但是当我尝试从 B 返回到 A 时,应用程序已关闭。

这是用于导航到父级的函数 activity:

@Override
public void onBackPressed() {
    Intent intent = NavUtils.getParentActivityIntent(this);
    NavUtils.navigateUpTo(this,intent);
}

由于我的应用程序支持旧版本的 Android,我已经在多个设备上对其进行了测试,它可以在 GingerBread 上正常运行,但不能在 Lollipop 上运行。我想这个问题可能来自新版本中的一些功能更改。

首先不要在清单文件中使用 <meta-data> 标签进行导航。 而是使用明确的意图,因为你知道目标 activity

试试这个 -

从A到B

在 activity A 中 - 在按钮点击时使用以下代码

Intent intentAtoB = new Intent (A.this,B.class);
startActivity(intentAtoB);
finish();

从B到C

1) 在 activity B 中 - 在按钮点击时使用以下代码

Intent intentBtoC = new Intent (B.this,C.class);
startActivity(intentBtoC);
finish();

2) 在 activity B 中 - 只需覆盖 onBackPressed()

@Override
public void onBackPressed() {
    Intent intent = new Intent (B.this,A.class);
    startActivity(intent);
    finish();
}

从C到B

在 activity C 中 - 只需覆盖 onBackPressed()

@Override
public void onBackPressed() {
    Intent intent = new Intent (C.this,B.class);
    startActivity(intent);
    finish();
}

希望这会有所帮助:)