Скрыть пункт контекстного меню Android - PullRequest
3 голосов
/ 18 ноября 2010

Еще один вопрос новичка.У меня есть контекстное меню, которое я применяю для ListView, который просто позволяет пользователю перемещать элементы вверх или вниз или удалять элемент.

У меня есть код в onContextItemSelected (), чтобы предотвратить перемещение объектов вверх или вниз по списку и т. Д., Но я бы предпочел спрятать элементы контекстного меню в первую очередь, если (например)выбран верхний элемент в списке.

Я предполагаю, что мне нужно сделать это в onCreateContextMenu, но я не уверен, как.

Вот мой код onCreateContextMenu:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mycontextmenu, menu);
}

Спасибо,WTS

Ответы [ 4 ]

13 голосов
/ 18 ноября 2010

В вашем методе onCreateContextMenu вам нужно получить пункты меню, которые вы потенциально хотите скрыть, и установить их как невидимые на основе позиций списка.

Что-то вроде этого:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

if(info.position < 1) {
   myLocationMenuItem = menu.findItem(R.id.myLocation);
   myLocationMenuItem.setVisible(enable);
}
3 голосов
/ 19 марта 2014

Это решение для PopupMenu на тот случай, если кто-то ищет его, как я. Здесь у меня есть 3 кнопки в menu файле макета для PopupMenu, и в некоторых случаях я удаляю некоторые из них:

    PopupMenu popup = new PopupMenu(this, this.actionButton);
    popup.setOnMenuItemClickListener(this);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.menu_resume_view, popup.getMenu());

    Menu menu = popup.getMenu();
    if (this.resume.isPublished()) {
        menu.removeItem(R.id.menu_button_publish);
    }
    else {
        menu.removeItem(R.id.menu_button_unpublish);
        menu.removeItem(R.id.menu_button_update_publish_date);
    }

    popup.show();

При использовании PopupMenu onPrepareOptionsPanel не вызывается. Таким образом, вы должны получить пункты меню на id при создании PopupMenu и удалить те, которые не должны быть доступны в конкретном случае.

2 голосов
/ 18 ноября 2010

Если контекстное меню открывается для ListView, menuInfo будет содержать объект типа AdapterContextMenuInfo, который дает вам информацию о том, какой элемент в списке был выбран. Если это первый или последний элемент, вы можете просто удалить соответствующие записи из контекстного меню, хотя я не совсем уверен, что произойдет, если не останется ни одной записи.

1 голос
/ 20 сентября 2013

Вы можете отключить определенный элемент, если хотите.

@Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo)
     {
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

                int position = info.position;

                // use this position to decide your item clicked

                menu.clear();
                menu.setHeaderTitle("Context Menu Title");
                String[] menuItems = getResources().getStringArray(
                        R.array.menu_context);


                for (int i = 0; i < menuItems.length; i++)
                {
                    menu.add(Menu.NONE, i , i, menuItems[i]);
                }
               menu.getItem(0).setEnabled(**Conditional check**);
               menu.getItem(1).setEnabled(**Conditional check**);
               menu.getItem(2).setEnabled(**Conditional check**);
     }
...