要启用 ActionBar 后退按钮,您显然需要在 Activity 中使用 ActionBar。这是由您使用的主题设置的。您可以在AndroidManfiest.xml
. 如果您使用例如@android:style/Theme.NoTitleBar
主题,您没有ActionBar。在这种情况下,调用getActionBar()
将返回 null。因此,请确保您首先拥有一个 ActionBar。
下一步是在android:parentActivityName
按下后退按钮时将 设置为要导航的活动。这也应该完成AndroidManifest.xml
。
onCreate
现在您可以在“子”活动的方法中启用后退按钮。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
现在您应该实现后退按钮的逻辑。您只需覆盖onOptionsItemSelected
“子”活动中的方法并检查后退按钮的 id,即android.R.id.home
.
现在您可以触发该方法,NavUtils.navigateUpFromSameTask(this);
但如果您没有android:parentActivityName
在您中指定,AndroidManifest.xml
这将使您的应用程序崩溃。
有时这就是你想要的,因为它提醒你忘记了“某事”。因此,如果您想防止这种情况发生,您可以使用该getParentActivityIntent()
方法检查您的活动是否有父级。如果这返回 null,则您没有指定父级。
在这种情况下,您可以触发与onBackPressed()
用户按下设备上的后退按钮基本相同的方法。一个不会让你的应用崩溃的好的实现是:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
请注意,用户看到的动画在 和 之间是不同NavUtils.navigateUpFromSameTask(this);
的onBackPressed()
。
走哪条路取决于您,但我发现该解决方案很有帮助,尤其是当您为所有活动使用基类时。