我的应用程序是基于活动的,有几个级别,即ActivityA有动作启动ActivityB,后者又启动ActivityC。从ActivityC按“返回”返回ActivtyB,然后返回到返回ActivityA,正如您所期望的那样。
在我的ActionBar中,我启用了Home图标,以便显示向上导航箭头。我打算以与Back按钮相同的方式工作,但是从ActivityC单击Up仍然会将我返回到ActivityA,即使我已将以下内容添加到清单中:
<activity android:name=".activity.ActivityC"
android:parentActivityName=".activity.ActivityB">
<!-- Parent activity meta-data to support API level 7+ -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.ActivityB" />
</activity>
两个问题:
1)我是否试图在这里滥用ActionBar? Up图标是否始终返回主活动? 2)为什么我的实现不能像我预期的那样工作?
答案 0 :(得分:2)
1)不,你不是想在这里滥用ActionBar。如果你要去A - &gt; B - &gt; C然后从C按下Up应该带你到B而不是A.这被称为here
“向上”按钮用于根据屏幕之间的层次关系在应用内导航。例如,如果屏幕A显示项目列表,则选择项目会显示屏幕B(更详细地显示该项目) ),然后屏幕B应该提供一个返回屏幕A的向上按钮。“
2)您的实施工作无法按预期运行,因为您忘记按照here所述执行以下操作:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_displaymessage);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// If your minSdkVersion is 11 or higher, instead use:
// getActionBar().setDisplayHomeAsUpEnabled(true);
}
但是我不建议您使用上述技术来处理您的向上导航,因为上述方法不适用于ICS及以下。它不起作用的原因是因为NavUtils对Pre JellyBean和Post JellyBean的行为不同,如SO.
中所述。更好的方法是在子活动中手动处理Up操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
startActivity(new Intent(this, ParentActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
Intent.FLAG_ACTIVITY_SINGLE_TOP));
default:
return super.onOptionsItemSelected(item);
}
}
本手册方法的最佳部分是适用于所有Api级别。