我的应用程序有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();
}
希望这会有所帮助:)