2011-05-20 82 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

我就遇到了這個問題。在我的情況下,我將活動屏幕的背景顏色設置爲黑色。當菜單彈出時,它有一個透明的背景和黑色的文字,所以我沒有看到它的工作。