简体   繁体   English

Android:单击一个 MenuItem 使另一个 MenuItem 在工具栏中可见

[英]Android: click on one MenuItem to make another MenuItem visible in the toolbar

Example:例子:

  • Menu1 (visible = false)菜单 1(可见 = 假)
  • Menu2 (visible = false)菜单 2(可见 = 假)
  • Menu3 (visible = true)菜单 3(可见 = 真)

When click on Menu3, I want Menu1 and Menu2 to be displayed.单击 Menu3 时,我希望显示 Menu1 和 Menu2。

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem Menu1 = menu.findItem(R.id.Menu1);
    MenuItem Menu2 = menu.findItem(R.id.Menu2);

    Menu1.setVisible(false);
    Menu2.setVisible(false);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.Menu3) {
        item.setVisible(false);
        Menu menu;
        menu.findItem(R.id.Menu1).setVisible(true);

        return true;
    }

    return super.onOptionsItemSelected(item);
}

The following code is not working:以下代码不起作用:

Menu menu;
menu.findItem(R.id.Menu1).setVisible(true);

This code:这段代码:

Menu menu;
menu.findItem(R.id.Menu1).setVisible(true);

Will not work as the menu varaible is not initialized.将无法工作,因为menu变量未初始化。 You should initialize the menu variable as needed and then call to setVisible method.您应该根据需要初始化menu变量,然后调用 setVisible 方法。

You can use some boolean variables to set the desired state for the menu items.您可以使用一些boolean变量来设置菜单项的所需状态。 Then as soon as the user clicks on the Menu3 item, you change the boolean values and call invalidateOptionsMenu();然后,只要用户单击Menu3项,您就更改boolean值并调用invalidateOptionsMenu(); . . This will cause the menu to be recreated and so the other menu items will be shown as desired:这将导致重新创建菜单,因此其他菜单项将根据需要显示:

public class MainActivity extends AppCompatActivity
{
    private boolean showMenu1, showMenu2;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  

        // set the initial state here:
        showMenu1 = false;
        showMenu2 = false;
        ...
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        menu.findItem(R.id.Menu1).setVisible(showMenu1);
        menu.findItem(R.id.Menu2).setVisible(showMenu2);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
         int id = item.getItemId();
         if (id == R.id.Menu3)
         {
             showMenu1 = true;
             showMenu2 = true;
             invalidateOptionsMenu();
             return true;
         }
         ...
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM