Как добавить или удалить пункт меню опции по нажатию кнопки? - PullRequest
1 голос
/ 03 июля 2019
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);
    }

Мне нужно добавить или удалить мои optionmenuitem, используя те button, нажмите

Ответы [ 4 ]

1 голос
/ 03 июля 2019

Просто измените видимость в зависимости от ваших условий:


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


0 голосов
/ 03 июля 2019

Вы можете надуть свое меню в 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);
    }
0 голосов
/ 03 июля 2019

Вы можете добавить логическую переменную при создании кнопки в 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);
}
0 голосов
/ 03 июля 2019

таким образом вы можете добавлять или удалять их во время выполнения.

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>
...