无法向上导航至 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();
}
希望这会有所帮助:)
我的申请中有 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();
}
希望这会有所帮助:)