В OptionsMenu, как создать другое ContextMenu в зависимости от элемента, по которому щелкнули - PullRequest
0 голосов
/ 18 января 2019

РЕДАКТИРОВАТЬ: Спасибо, но в конце концов я нашел ответ. Я просто использовал временный ArrayList со строкой текста, чтобы определить, какое меню открыть, а затем очистил ArrayList.

У меня OptionsMenu отображается правильно. Мне удается легко щелкнуть по предмету, получить идентификатор предмета и использовать переключатель, чтобы сделать что-то в соответствии с идентификатором. Проблема в том, что я хочу запустить другое плавающее контекстное меню в зависимости от Id. Проблема в том, что метод

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
}

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

Означает ли это, что мне нужно создавать разные объекты View, потому что, когда я пытаюсь создать экземпляр ContextMenu с другим объектом View, он, похоже, не реагирует. Я попытался создать пустые объекты View для этого вопроса, но он ничего не делает. Мне удалось открыть разные OptionsMenu, используя фрагменты. я использую this.openContextMenu (mNavigationView); открыть ContextMenu из метода onNavigationItemSelected.

@Override
public boolean onNavigationItemSelected(MenuItem item){
    int id = item.getItemId();
    switch (id) {
                    case R.id.item1:
                        this.openContextMenu(mNavigationView);
                        break;
                    case R.id.item2:
                        this.openContextMenu(mNavigationView);
                        break;
                    case R.id.item3:
                        this.openContextMenu(mNavigationView);
                        break;
                    default:
                        break;
                }

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    //I would need info here to determine what context menu to open
    //according to the item's id in onNavigationItemSelected
}

В onCreate я поместил

registerForContextMenu(mNavigationView);
...