2011-05-20 85 views
0

我喜欢这个网站,你们都很棒!但这里是我有另一个问题: 在我的应用程序,我有一个webview,显示在整个屏幕上的网站,我做了一个代码来显示一个菜单,通过推动手机的菜单按钮从我想要的地方2事情发生第一菜单item返回到应用程序的主屏幕,第二个菜单项退出应用程序或退出应用程序。 第一个问题: 按下菜单按钮后显示菜单...如果我再次按下它显示两个选择两次,如果我再次按下它现在两个项目显示3次,依此类推! 第二个问题: 选择任何两个选择后没有任何反应! 这里是我的代码,请告诉我我做错了什么! 感谢Android硬件菜单按钮代码无法正常工作!需要帮助

菜单的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; 
    } 

回答

1

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

另外:

  • 如果你觉得my.app.BACKTOMAIN活动运行,你可能要添加FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_CLEAR_TOPIntent
  • 摆脱menuToSalir菜单选项。没有写得很好的Android应用程序会调用System.exit(0)。用户通过按HOME按钮离开您的应用程序,与Web应用程序中的可能不同。
+0

@ CommonsWave我确实将onPrepareOptionsMenu()更改为onCreateOptionsMenu()并且它工作得更好我每次点击菜单按钮时都会看到相同的菜单,但在另一个FLAG_REORDER-TO_FRONT或FLAG_ACTIVITY_CLEAR_TOP到Intent中。你能否用样本解释我多一点?谢谢 – zvzej 2011-05-20 22:04:03

+0

@zvzej:'Intent i = new Intent(“my.app.BACKTOMAIN”); i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);' – CommonsWare 2011-05-20 22:11:13

+0

它给我一个错误来解决它问我是否想为FLAG_ACTIVITY_CLEAR_TOP – zvzej 2011-05-20 22:33:45

0

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

我不积极如何解决第二个问题,我通常创建我的菜单都在java中而不是像你一样使用xml。

+0

你能解释一下我的例子吗?或者给我一个在java上编码的例子,或者我可以在哪里找到它。谢谢 – zvzej 2011-05-20 21:53:25

0

我发现它的问题!我缺少的 “S” 在...

public boolean onOptionItemSelected(MenuItem item){ 

的正确方法是

public boolean onOptionsItemSelected(MenuItem item){ 

感谢您的帮助蒂姆和CommonsWare

0

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