我的应用程序有3个活动(A-主要活动-,B和C)。我可以从活动A导航至B,从B导航至活动C。

当按下后退按钮(或单击上导航按钮)时,当前活动已完成且父活动已开始(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,然后返回A(通过向上导航),则它可以正常工作。但是,如果我从A转到B,然后从B向下到C,则允许我返回到B,但是当我尝试从B返回到A时,应用程序关闭。

这是用于导航到父活动的功能:

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


由于我的应用程序支持较旧的Android版本,因此我已经在多种设备上对其进行了测试,并且它可以在GingerBread上正常运行,但不能在Lollipop中使用。我猜问题可能来自较新版本中的某些功能更改。

最佳答案

首先不使用<meta-data>标记清单文件用于导航目的。
而是使用明确意图,你知道自己的目标活动

尝试这个 -

从A到B

在活动A - 按钮点击下面的代码使用

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


从B到C

1)在活性乙 - 下面的代码使用上按钮点击

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


2)在活性乙 - 只是倍率onBackPressed()

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


从C到B

在活动Ç - 只是覆盖onBackPressed()

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


希望这会有所帮助:)

10-08 03:07