Как я могу создать несколько контекстных меню? - PullRequest
4 голосов
/ 04 сентября 2010

У меня есть 1 действие, но я хотел бы иметь несколько контекстных меню для различных компонентов пользовательского интерфейса.

Например, у меня есть ListView, который будет реагировать на:

@Override  
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  

        super.onCreateContextMenu(menu, v, menuInfo);  
        menu.setHeaderTitle("Selection Options");  
        menu.add(0, v.getId(), 0, "Remove");  
    }  

Как создать другое контекстное меню для события onClick для имеющегося у меня ImageView?

Ответы [ 3 ]

10 голосов
/ 04 сентября 2010

На самом деле этот метод заключается в динамическом изменении меню параметров.Чтобы создать несколько контекстных меню, вы должны определить их в своем методе onCreateContextMenu.Как вы можете видеть, этот метод получает View как параметр, то есть View, по которому вы щелкнули, чтобы отобразить меню.Таким образом, вы сохраняете метод, который у вас есть для ListView, и добавляете некоторые условия, чтобы дифференцировать ваш Views.Затем вы используете эти условия для создания требуемого Context Menu.

Примечание: Контекстные меню не поддерживают значки, поэтому если вам нужны значки, изображения или что-то подобное, вам придется либоиспользуйте меню параметров, которое вы динамически изменяете, или создайте пользовательское меню с пользовательским видом, намерениями и всем прочим.

2 голосов
/ 25 марта 2014

Вы можете использовать tags.

Перед регистрацией в соответствующем контекстном меню установите тег на rootView:

private static final Integer CONTEXT_MENU_YOUR_ACTION = 1; //indicator of the current context menu type

// register for your context menu
rootView.setTag(R.id.TAG_CONTEXT_MENU_ID, CONTEXT_MENU_YOUR_ACTION);
registerForContextMenu(rootView);
rootView.showContextMenu();
unregisterForContextMenu(rootView);

Затем внутри onCreateContextMenu вы можете проверить текущий тег на вашем rootView:

Integer contextMenuId = (Integer) rootView.getTag(R.id.TAG_CONTEXT_MENU_ID);

if (CONTEXT_MENU_YOUR_ACTION.equals(contextMenuId)) {
    //custom your context menu
}

Такая же проверка актуальна для метода onContextItemSelected.

0 голосов
/ 04 сентября 2010
@Override
public boolean onPrepareOptionsMenu(Menu menu) 
{
    // TODO Auto-generated method stub
    return super.onPrepareOptionsMenu(menu);
}

Вы можете проверить свои условия в рамках этого метода. Это сработает до того, как меню станет видимым для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...