【问题标题】:Android Hardware Menu button code not working properly! need helpAndroid 硬件菜单按钮代码无法正常工作!需要帮忙
【发布时间】:2011-05-20 21:39:44
【问题描述】:

我喜欢这个网站,你们都很棒!但这是我遇到的另一个问题: 在我的应用程序中,我有一个在整个屏幕上显示网站的 web 视图,我制作了一个代码,通过按下手机的菜单按钮来显示菜单,我希望从那里发生 2 件事 第一个菜单项 返回应用程序的主屏幕, 第二个菜单项退出应用程序或退出应用程序。 第一个问题: 按下菜单按钮后,它会显示菜单......如果我再次按下它,它会显示两个选项,如果我再次按下它,现在两个项目都会显示 3 次,依此类推! 第二个问题: 选择两个选项中的任何一个后,什么都没有发生! 这是我的代码,请告诉我我做错了什么! 谢谢

菜单xml:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuToMenu"
android:title="Menu Principal"
/>
<item
android:id="@+id/menuToSalir"
android:title="Salir"
/>
</menu>

Backtomain.java

import android.app.Activity;
import android.os.Bundle;

public class Backtomain extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

我在哪里调用菜单:

public boolean onPrepareOptionsMenu (Menu menu){
        super.onCreateOptionsMenu(menu);
        MenuInflater mostrar = getMenuInflater();
        mostrar.inflate(R.menu.main_menu, menu);
        return true;
        }

    public boolean onOptionItemSelected(MenuItem item){
        switch (item.getItemId()){
        case R.id.menuToMenu:
            startActivity (new Intent("my.app.BACKTOMAIN"));
            return true;
        case R.id.menuToSalir:
            finish();
            System.exit(0);
            return true;
        }
        return false;
    }

【问题讨论】:

    标签: java android eclipse button menu


    【解决方案1】:

    您从onPrepareOptionsMenu() 拨打super.onCreateOptionsMenu()。而且,您在onPrepareOptionsMenu() 的菜单中添加了相同的选项。将onPrepareOptionsMenu() 重命名为onCreateOptionsMenu(),它可能会表现得更好。

    还有:

    • 如果您认为my.app.BACKTOMAIN 活动正在运行,您可能需要将FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_CLEAR_TOP 添加到Intent
    • 去掉menuToSalir 菜单选项。任何编写良好的 Android 应用程序都不会调用System.exit(0)。用户通过按 HOME 按钮离开您的应用程序,这与在 Web 应用程序中可能没有什么不同。

    【讨论】:

    • @CommonsWave 我确实将 onPrepareOptionsMenu() 更改为 onCreateOptionsMenu() 并且效果更好,每次单击菜单按钮时我都会得到相同的菜单,但在另一个 FLAG_REORDER-TO_FRONT 或 FLAG_ACTIVITY_CLEAR_TOP 到意图。你能用样本多解释一下吗?谢谢
    • @zvzej: Intent i=new Intent("my.app.BACKTOMAIN"); i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);
    • 它给了我一个错误来解决它询问我是否要为 FLAG_ACTIVITY_CLEAR_TOP 创建一个变量常量或字段
    • @zvzej:啊,对不起,应该是i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    • 是的,引用没有给出错误,但是当我按下菜单选项时它什么也没做。
    【解决方案2】:

    要解决您的第一个问题,请尝试 onCreateOptionsMenu(),而不是 onPrepareOptionsMenu()。

    我不确定如何解决第二个问题,我通常使用 java 来创建我的菜单,而不是像你一样使用 xml。

    【讨论】:

    • 你能给我解释一下,或者举一个在java上编码的例子,或者我在哪里可以找到。谢谢
    【解决方案3】:

    我发现了它的问题!我在...处错过了“s”

    public boolean onOptionItemSelected(MenuItem item){ 
    

    正确的方法是

    public boolean onOptionsItemSelected(MenuItem item){
    

    感谢蒂姆和 CommonsWare 的帮助

    【讨论】:

      【解决方案4】:

      我遇到了这个问题。就我而言,我已将活动屏幕的背景颜色设置为黑色。当菜单弹出时,它有一个透明的背景和黑色的文字,所以我没有看到它工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 2012-03-06
        相关资源
        最近更新 更多