我有一个非常简单的用例,似乎适用于我的所有活动,除了一个。我的所有活动都在呼叫getActionBar().setDisplayHomeAsUpEnabled(true);
。唯一不起作用的地方是我刚刚添加的Activity,这也是我从主活动的信息菜单中启动的唯一一个。在这种情况下,实际的OS后退按钮按预期工作,但主页按钮不是。这是启动活动的菜单逻辑:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.share:
share();
return true;
case R.id.support:
emailSupport();
return true;
case R.id.settings:
settings();
return true;
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
问题在于SettingsActivity
,在您在上面的开关中看到的settings()
方法在菜单中调用:
private void settings(){
Intent intent = new Intent(InfoMenuActivity.this, SettingsActivity.class);
startActivity(intent);
}
onCreate
的{{1}}也非常简单:
SettingsActivity
我最初只进行了第一次@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = this.getSharedPreferences(getString(R.string.preference_file), Context.MODE_PRIVATE);
setView();
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowHomeEnabled(true);
}
调用,但添加了第二次调用以查看它是否发生了变化,但事实并非如此。
我错过了什么?
答案 0 :(得分:2)
从评论中看来,您似乎不知道如何在清单中设置父活动并继续支持旧版本。
对于API 16,您可以使用parentActivityName
属性,但对于旧版本,您必须添加元标记:
<activity
android:name="com.example.SettingsActivity"
android:label="Settings Activity"
android:parentActivityName="com.example.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
</activity>
如果你想要做的只是覆盖向上按钮功能作为后退按钮,那么不要忘记在每个活动中你必须覆盖onOptionsItemSelected
。< / p>
但请记住,覆盖任何默认和预期的 Android行为都是不好的做法。