繁体   English   中英

如何在按钮单击时添加或删除选项菜单项?

[英]How to add or remove option menu item on button click?

private static final int MY_MENU_1 = Menu.FIRST;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, MY_MENU_1, 0, "Hello").setShortcut('3', 'c');
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case MY_MENU_1:

                return true;
        }
        return super.onOptionsItemSelected(item);
    }

我需要使用这些button单击添加或删除我的optionmenuitem

只需根据您的条件更改视图可见性,如下所示:


btn.setOnClickListener(v->{
  if(condition)
     menu.findItem(R.id.id_name).setVisible(true);
  else
     menu.findItem(R.id.id_name).setVisible(false);
});


这样您就可以在运行时添加或删除它们。

PopupMenu popupMenu = new PopupMenu(YourActivity.this, view);

        popupMenu.getMenu().add(1, R.id.complain_the_user, 3, R.string.complain_the_user);
        popupMenu.getMenu().add(2, R.id.mute, 3, R.string.mute);
        popupMenu.show();

菜单 -> popup_profile.xml

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

    <item android:id="@+id/block"
        android:title="@string/block"/>

    <item android:id="@+id/mute"
        android:title="@string/mute"/>

    <item android:id="@+id/complain_the_user"
        android:title="@string/complain_the_user"/>

</menu>

您可以在 onCreateOptionsMenu() 中创建按钮时添加布​​尔变量:

private static Boolean condition = true; 

@Override public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu);
    if (condition) {
        menu.add(0, MY_MENU_1, 0, "Hello").setShortcut('3', 'c'); 
    }
    return true; 
}

然后,当单击项目时,您应该更改 onOptionsItemSelected() 中的变量并调用 invalidateOptionsMenu() 以重建菜单列表:

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{

    switch (item.getItemId()) 
    {
        case MY_MENU_1:
            condition = false;
            invalidateOptionsMenu();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

您可以在 onCreateOptionsMenu 中扩充您的菜单,并且可以在 onPrepareOptionsMenu 中添加和删除(可见或不可见)。

public boolean onCreateOptionsMenu(Menu menu){

      super.onCreateOptionsMenu(menu);

      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.MY_MENU_1, menu);

      return true;
    }

    //choose visibility for menu item using displayItem= true/false
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

      MenuItem menuItem = menu.findItem(R.id.MY_MENU_1);

      if(displayItem)
       menuItem.setVisible(true);
      else
        menuItem.setVisible(false);

      return super.onPrepareOptionsMenu(menu);
    }

暂无
暂无

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

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