2012-08-10 75 views
1

如問題所述,它不起作用。當我按菜單按鈕時,什麼都沒有出來。Android選項菜單不起作用

這是菜單活動:

public class AndroidMenuActivity extends Activity{ 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    super.onCreateOptionsMenu(menu); 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    switch(item.getItemId()){ 
     case R.id.edit: 
      Toast.makeText(getApplicationContext(), "edit selected", Toast.LENGTH_SHORT).show(); 
      Intent i = new Intent(getApplicationContext(), PhotoFlashActivity.class); 
      startActivity(i); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
} 

和一個非常小的menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/edit" 
    android:title="Edit"/> 

</menu> 

我不知道什麼是錯的,我已經看了教程沒提到將活動添加到清單文件中,所以我不確定是否必須這樣做。甚至當我做到這一點時也不起作用。我試過清理這個項目,但那也不管用。

+0

嗨,@consprice我只是添加菜單相關的代碼和menu.xml文件到我活動,我發現它的作品。也許別的東西是錯的。 – Huang 2012-08-10 03:28:29

+0

@黃我試着刪除活動創建新的確切代碼,但不起作用。一個小問題,是否需要將活動添加到清單文件?如果可能的話,還有什麼可能造成這種情況。如果有幫助,我使用api level 8。 – consprice 2012-08-10 03:37:45

+0

您應該在清單文件中聲明您自己的所有活動,否則當系統嘗試啓動活動時系統會發出錯誤,因爲系統找不到它。我剛剛創建了一個全新的API 7項目,並且複製了與菜單過程相關的所有代碼,並且它能夠工作... – Huang 2012-08-10 03:46:46

回答

0

這可能不是什麼,但是如果你重寫onCreateOptionsMenu(...)恰好是這樣的:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 

    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

嗨尼克,感謝您的答案,但它不工作... – consprice 2012-08-10 03:14:24

+0

完全評論super.OnCreateOptionsMenu(...)的呼叫呢?我在我寫的一些較舊的應用程序中看到(選項菜單已過時並已被ActionBar取代),我從未對該方法進行過調用。 – Nick 2012-08-10 03:18:52

+0

,這不起作用,事實上,最初,我根本沒有super.onCreateOptionsMenu()。添加它後看這個鏈接http://www.coderanch.com/t/502429/Android/Mobile/Menu – consprice 2012-08-10 03:25:34

0

改變你這樣的代碼和chaeck。

 @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// TODO Auto-generated method stub 
super.onCreateOptionsMenu(menu); 
MenuInflater menuInflater = getMenuInflater(); 
menuInflater.inflate(R.menu.menu, menu); 
return true; 
} 

public boolean onContextItemSelected(MenuItem item) {  
    onOptionsItemSelected(item); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// TODO Auto-generated method stub 
    switch(item.getItemId()){ 
    case R.id.edit: 
     Toast.makeText(getApplicationContext(), "edit selected", Toast.LENGTH_SHORT).show(); 
     Intent i = new Intent(getApplicationContext(), PhotoFlashActivity.class); 
     startActivity(i); 
     return true; 
     default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
} 
0
public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.activity_custom__list_view, menu); 
     return true; 
    } 


    public boolean onOptionsItemSelected(MenuItem item) { 


       ....code...... 

      return super.onOptionsItemSelected(item); 
    } 
0

試試這個代碼,其works我完美。

main.class

public class OptionmenuActivity extends Activity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 


    MenuInflater inflater=getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    //return super.onCreateOptionsMenu(menu); 

    menu.add("hello").setIcon(R.drawable.ic_launcher); 
    menu.add("patel").setIcon(R.drawable.ic_launcher); 
    menu.add("abc").setIcon(R.drawable.ic_launcher); 
    menu.add("hello").setIcon(R.drawable.ic_launcher); 
    menu.add("").setIcon(R.drawable.ic_launcher); 
    menu.add("").setIcon(R.drawable.ic_launcher); 

    return super.onCreateOptionsMenu(menu); 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) 
    { 
    case R.id.feeds: 
     Toast msg = Toast.makeText(OptionmenuActivity.this, "feeds", Toast.LENGTH_LONG); 
     msg.show(); 
     return true; 

    case R.id.friends: 
     Toast msg1 = Toast.makeText(OptionmenuActivity.this, "friends", Toast.LENGTH_LONG); 
     msg1.show(); 
     return true; 
    case R.id.about: 
     Toast msg2 = Toast.makeText(OptionmenuActivity.this, "about", Toast.LENGTH_LONG); 
     msg2.show(); 
     return true; 

    case 2: 

     Toast msg3 = Toast.makeText(OptionmenuActivity.this, "Menu 1", Toast.LENGTH_LONG); 
      msg3.show(); 
      return true; 

    } 
    return true; 
} 
} 

創建menu文件夾放到res文件夾中創建menu.xmlmenu文件夾內之後。

menu.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/feeds" 
    android:title="Feeds" 
    android:icon="@drawable/ic_launcher"/> 

<item 
    android:id="@+id/friends" 
    android:title="Friends"/> 

<item 
    android:id="@+id/about" 
    android:title="About"/> 

0
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu);   
     menuInflater.inflate(R.menu.menu, menu); 
     menu.findItem(R.id.edit).setTitle("Edit"); 
} 

你也可以試試力:

menu.findItem(R.id.edit).setVisible(true); 

然後...

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case R.id.edit: 
      //DO SOMETHING 
      return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

OR .... 您可以創建基於Java的菜單:

private static final int MENU_EDIT = 1;  
MenuItem itemconfig = menu.add(0, MENU_EDIT , 0, "Edit"); 
      itemconfig.setIcon(android.R.drawable.ic_menu_edit); 
      itemconfig.setShowAsAction(2); 

和onOptionsItemSelected:

case: MENU_EDIT 
    //DO SOMETHING 
    return true;