如何在一个活动中显示两个不同的菜单选项

4

我按照这个教程实现了菜单选项,当在这一行返回True时显示菜单选项:myMenuInflater.inflate(R.menu.menu, menu);

当返回false时,我该如何添加另一个菜单选项?我想在同一个菜单按钮中显示两个不同的菜单选项。我的代码:

import android.view.MenuItem;
import android.widget.Toast;
public class AndroidOptionMenu 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 myMenuInflater = getMenuInflater();
      myMenuInflater.inflate(R.menu.menu, menu);     
      return true;
  }
  @Override public boolean onOptionsItemSelected(MenuItem item) 
  {  
      switch(item.getItemId()) {   
      case(R.id.menu_OK):
          Toast.makeText(this, "OK", Toast.LENGTH_LONG).show(); 
          break; 
      case(R.id.menu_help):
          Toast.makeText(this, "Help", Toast.LENGTH_LONG).show();  
          break; 
      case(R.id.menu_Cancel):  
          Toast.makeText(this, "Cancel", Toast.LENGTH_LONG).show();
          break; 
      }   
      return true; 
  } 
}

我认为你并不完全理解那段代码示例所展示的内容。为什么不尝试将MenuInflater的返回值更改为false,看看会发生什么?如果你完全没有看到任何菜单,你会感到惊讶吗? - MarsAtomic
当值为真和值为假时,我想显示两个不同的菜单选项。 - Hayya Anam
请阅读此选项菜单教程:http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-an-options-menu/您永远不会遇到MenuInflater返回false的情况,因为它是硬编码为返回true的。 为什么它应该始终返回true?因为如果它返回false,菜单根本就不会打开。您的问题在于您对Android选项菜单的理解不够好。请花时间研究并理解互联网上提供的众多选项菜单教程之一。 - MarsAtomic
2个回答

2
“你不能这样做。”
“至少不能使用onCreateOptionsMenu()的返回值。”
根据Android Doc for onCreateOptionsMenu():“你必须返回true才能显示菜单;如果你返回false,菜单将不会被显示。”
你需要找到另一种方法来决定何时显示第一个和何时显示第二个菜单,然后你可以这样做:
@Override public boolean onCreateOptionsMenu(Menu menu)
{
      MenuInflater myMenuInflater = getMenuInflater();
    if(showFirstMenu)
    {
        myMenuInflater.inflate(R.menu.menu, menu);     
    } else {
        myMenuInflater.inflate(R.menu.menu2, menu); // here you show the other menu
    }
      return true;
}

你可以用任何条件替换 showFirstMenu 来决定应该显示哪个菜单。 - Dodge

2
据我所记,你可以使用onPrepareOptionsMenu在运行时设置要显示在菜单上的菜单项。通过这种方式,你可以将菜单项分组为第一个或第二个,并选择要显示哪一个。 同时,你可以尝试:
    @Override 
    public boolean onPrepareOptionsMenu(Menu menu)
    {

        MenuInflater myMenuInflater = getMenuInflater();
        if(condition)
        {
          myMenuInflater.inflate(R.menu.menu, menu);     
        } else {
          myMenuInflater.inflate(R.menu.menu2, menu); // here you show the other menu
        }
        return true;
    } 

我希望那能够起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接