【问题标题】:How to get onPrepareOptionsMenu to "toggle" my preferences class如何让 onPrepareOptionsMenu “切换”我的偏好类
【发布时间】:2013-08-03 02:39:09
【问题描述】:

我的代码:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    Intent settingsActivity = new Intent(getBaseContext(), Preferences.class);
    startActivity(settingsActivity);
    return true;
}

这可以打开设置菜单 (Preferences.class),但如果在按下此系统按钮时它已经打开,我希望它关闭菜单。我可以添加或更改什么来实现这一点?

【问题讨论】:

  • 你到底想在这里实现什么?您的问题不是很清楚,尤其是当您提到“系统按钮”时。您确定您正确使用onPrepareOptionsMenu 吗?它通常应该用来修改菜单的内容,而不是开始一个新的活动,见developer.android.com/reference/android/app/…
  • @btse 感谢您的快速响应。对不起,不清楚的问题..这还是新的。我可能 - 不 - 正确使用 onPrepareOptionsMenu,这可能是问题所在!我实现了在 [link]kaloer.com/android-preferences 找到的自定义设置菜单,但我不确定将调用粘贴到首选项类的位置,所以我将它放在重写的 onCreateOptionsMenu 方法中。当这仅适用于每个活动的第一次调用时,我切换到 onPrepareOptionsMenu 方法。我应该使用什么来启动包含我的自定义首选项菜单的新活动?
  • 您应该有一个“设置”项,您应该能够选择它,然后将您带到您的偏好类。让我为你写一个回复。

标签: android preferences


【解决方案1】:

以下是你应该如何实现你想要的:

首先,您要提供一个“设置”项,用户可以选择该项以进入您的Preferences 课程。为此,您可以在 menu/main.xml 中添加一个项目并将其添加到 onCreateOptionsMenu() 中。

menu/main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Settings"/>

    ...

</menu>

在您的 Main Activity 中,覆盖它以扩展您的 main.xml 文件:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);

    ...

    return super.onCreateOptionsMenu(menu);
}

然后覆盖它以处理选择Menu 项目时发生的情况,在本例中为Settings 项目:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.action_settings:
            Intent settingsActivity = new Intent(getBaseContext(), Preferences.class);
            startActivity(settingsActivity);
            return true;
        ...
        default:
            return super.onOptionsItemSelected(item);
    }
}

【讨论】:

  • 感谢您的解释!我将在今晚实施它并回来将您的答案标记为已接受。
  • 再次感谢代码。我进行了更改,但我不确定这是我想要做的。现在有一个额外的步骤来访问菜单。灰色栏会在底部弹出,点击它会将用户带到我的自定义设置菜单。我喜欢把它们直接带到菜单上。你知道跳过膨胀的菜单是不是不好的做法?
  • @CaseyMurray 对不起!我想我没有完全理解你想要达到的目标。听起来您正在为具有集成菜单按钮的手机进行开发。您应该记住,现在很多手机都没有这个功能,它们依靠操作栏上的三个点来访问菜单。三个点表示有更多选项。在您的应用程序中忽略此功能并直接进入首选项屏幕可能是有意义的,但我不能肯定地说。我建议你阅读developer.android.com/guide/topics/ui/actionbar.html
【解决方案2】:

我可以通过将其添加到我的自定义首选项菜单类来关闭菜单:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        onBackPressed();
        return false;
    }

这叫:

@Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

这会将用户带回屏幕以进行另一轮比赛。我不知道这是否对每种情况都是可接受的解决方案,但它对我有用。

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多