我的应用程序中有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中没有。我想这个问题可能来自新版本中的某些功能变化。
答案 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();
}
希望这会有所帮助:)