后退按钮有效,但操作栏按钮不起作用?

时间:2014-09-08 12:30:32

标签: android android-activity

我有一个非常简单的用例,似乎适用于我的所有活动,除了一个。我的所有活动都在呼叫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); } 调用,但添加了第二次调用以查看它是否发生了变化,但事实并非如此。

我错过了什么?

1 个答案:

答案 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行为都是不好的做法。