无法导航到主要活动

时间:2016-03-15 09:42:21

标签: android android-navigation

我的应用程序中有3个活动(A -main activity - ,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中没有。我想这个问题可能来自新版本中的某些功能变化。

1 个答案:

答案 0 :(得分:1)

首先,不要在清单文件中使用<meta-data>标记进行导航。 而是在您知道目标活动时使用显式意图

试试这个 -

从A到B

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

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

从B到C

1)在活动B中 - 使用下面的代码点击按钮

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

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

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

从C到B

在活动C中 - 只需覆盖onBackPressed()

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

希望这会有所帮助:)