代码之家  ›  专栏  ›  技术社区  ›  Nestor

如何在Android中用另一个菜单动态替换菜单

  •  2
  • Nestor  · 技术社区  · 9 年前

    我有一个ListActivity( SherlockListActivity )并且其内容可以由用户动态地改变。当内容改变时, 应替换选项菜单 .

    作为我 learned 而不是 onCreateOptionsMenu 我应该使用 onPrepareOptionsMenu 这在用户每次选择菜单时都会被调用。

    这在每次显示菜单之前调用。

    我有以下代码:

    @Override
      public boolean onPrepareOptionsMenu(Menu menu)
      {
        menu.clear();
        if (UserOption == UserOption1)
          getSupportMenuInflater().inflate(R.menu.menu_option1, menu);
        else
          getSupportMenuInflater().inflate(R.menu.menu_option2, menu);
        return super.onPrepareOptionsMenu(menu);
      }
    

    它在调试期间只调用一次,所以我总是使用相同的菜单。

    我应该设置什么来使其工作?

    1 回复  |  直到 5 年前
        1
  •  4
  •   Arun Shankar    5 年前

    创建并准备用于更改的选项菜单及其项目选择方法

     @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            menu.clear();
            MenuInflater inflater = getMenuInflater();
            if(menuString=="red"){
            inflater.inflate(R.menu.red_menu, menu);
            }else if(menuString=="green"){
            inflater.inflate(R.menu.green_menu, menu);
            }
            return true;
        }
    
    
     @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
                case R.id.new_game:
                    return true;
                case R.id.help:
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    

    无论何时你想更改菜单调用

    String menuString="red or green";
    invalidateOptionsMenu();
    

    正如其他人所说,如果你想使用静态菜单 onCreateOptionsMenu ,如果要动态更改其可见性,请使用 onPrepareOptionsMenu 随着 在创建选项菜单上