Как получить идентификатор элемента из всплывающего меню панели действий?

У меня возникают проблемы с доступом к элементу во всплывающем меню, когда я нажимаю MenuItem на панели действий. Другими словами, я не знаю, как получить идентификатор элементов из всплывающего меню, когда я нажимаю на элемент панели действий. Примечание: public boolean onMenuItemClick(MenuItem item) не работает.

     @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle presses on the action bar items

        if(item.getItemId()== R.id.action_settings) {
            openPopup();
        }
        return super.onOptionsItemSelected(item);
    }

        public void openPopup() {
            //find the settings button first
            View ActionItemView = findViewById(R.id.action_settings); 
            PopupMenu popupMenu = new PopupMenu(this, ActionItemView); 
            popupMenu.inflate(R.menu.popup);
            popupMenu.show();


       public boolean onMenuItemClick(MenuItem item)        {

            switch (item.getItemId())
                {
                case R.id.action_search:
                    openSearch();

                case R.id.PopupSettings:
                    openSettings();
                }   

       }

   }

person John123    schedule 27.12.2013    source источник


Ответы (1)


Ваше приложение должно сначала реализовать интерфейс PopupMenu.OnMenuItemClickListener, а затем реализовать метод, определенный в этом интерфейсе, который является методом onMenuItemClick(), если вы решите использовать анонимный класс, вы можете сделать это непосредственно в методе onCreate(), а также вот так, вообще не нужно использовать ключевое слово implements.

popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId())
            {
            case R.id.action_search:
                openSearch();
                return true; //return true to indicate it was handled, false otherwise

            case R.id.PopupSettings:
                openSettings();
                return true;
            default:
                return false;
            }   
    });

Вы должны использовать setOnMenuItemClickListener() для установки метода обратного вызова в этом меню каждый раз, когда пользователь выбирает опцию, иначе ваше всплывающее окно вообще ничего не сделает. По сути, необходимо реализовать метод setOnMenuClickListener() для прослушивания события для всплывающего меню.

person Biu    schedule 03.08.2014