要启用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);
BUTandroid: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()
。
取决于您走哪条路,但是我发现该解决方案很有帮助,尤其是如果您对所有活动都使用基类。
getActionBar().setDisplayHomeAsUpEnabled(true);
在的onCreate和switch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
在onOptionsItemSelected
?都在ServicesViewActivity中