2012-08-10 77 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;