Menu di scelta rapida fare clic su un pulsante nella Barra delle azioni

Sto cercando di mettere in atto un bar in cui uno dei pulsanti fare clic su mostra un menu a comparsa.
Ecco il menu. XML (voci di menu nella barra delle azioni)

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/search"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="0"
    android:showAsAction="always"
    android:title="@string/menu_search"/>
<item
    android:id="@+id/refresh"
    android:icon="@drawable/ic_action_refresh"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_refresh"/>


 <Item
    android:id="@+id/popup"
    android:icon="@drawable/ic_action_search"
    android:onClick="showPopup"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_search" />

Vorrei mostrare un popup menu cliccare la voce di avere id “@+id/popup”.

qui è l’XML per il menu a comparsa

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/item1"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="0"
    android:showAsAction="always"
    android:title="@string/menu_search"/>
<item
    android:id="@+id/item2"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_search"/>

qui è il metodo onClick del pulsante

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.overflow, popup.getMenu());
    popup.show();
}

E il problema è che nessun popup mostra fino al clic del pulsante. Bisogno aiutare persone.

Sei sicuro che showPopup viene chiamato? Forse onClick non registrati correttamente?
Io non sono sicuro se il onClick è la registrazione in modo corretto.
Impostare un registro.d o punto di interruzione nel showPopup metodo e vedere se si stampa nulla out/get hit. Se funziona, allora si può mettere a fuoco il codice all’interno showPopup.

OriginaleL’autore darsh | 2012-05-07

6 Replies
  1. 15

    Ho trovato questo qui: http://developer.android.com/guide/topics/ui/menus.html

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:id="@+id/selectImg"
            android:icon="@android:drawable/ic_dialog_dialer"
            android:showAsAction="always">
    
            <menu>
                <item android:id="@+id/top"
                    android:title="@string/topimg"/>
                <item android:id="@+id/bottom"
                    android:title="@string/botimg" />
            </menu>
    
        </item>
    </menu>

    Si può mettere un menu all’interno di un menu per presentare i sub-menu, quando l’elemento viene cliccato. Quindi, in Java, è possibile utilizzare gli stessi metodi, come al solito.

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            //Inflate the menu items for use in the action bar
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main, menu);
            return super.onCreateOptionsMenu(menu);
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            //Handle presses on the action bar items
           //View v = findViewById(R.id.f);
            switch (item.getItemId()) {
                case R.id.top:
                    //action
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }

    Id ‘top’ in xml è ancora riconosciuto, anche se è un sub menu. Questo ha funzionato per me e sembra proprio come il menu a comparsa.

    Questo dovrebbe essere accettato risposta

    OriginaleL’autore Nlinscott

  2. 14

    Ciao a tutti, ecco la mia soluzione : ho creato il showPopup metodo, e quindi ho chiamato il onOptionsItemSelected come questo :

    public void showPopup(){
        View menuItemView = findViewById(R.id.menu_save);
        PopupMenu popup = new PopupMenu(getActivity(), menuItemView);
        MenuInflater inflate = popup.getMenuInflater();
        inflate.inflate(R.menu.popup, popup.getMenu());
        popup.show();
    
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    
        switch (item.getItemId()) {
        case R.id.menu_save:    
            showPopup();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
    
    }

    popup.xml

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/decon"
        android:showAsAction="ifRoom"
        android:title="@string/decon"/>
    
    <item
        android:id="@+id/mRes"
        android:showAsAction="ifRoom"
        android:title="@string/mesRes"/>
    
    </menu>

    main.xml => si chiama metodo oncreateoptionsmenu

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item
        android:id="@+id/menu_save"
        android:enabled="true"
        android:icon="@drawable/action_save"
        android:showAsAction="ifRoom|withText"
        android:title="@string/action_save"
        android:visible="true"/>
    
    </menu>

    Finalmente ho

    implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method.
    Ha funzionato per me 🙂
    Grazie mille, davvero aiutato.

    OriginaleL’autore serabile

  3. 3

    Come il popup menu è un MENU, è necessario gestire l’implementazione di “onOptionsItemSelected”. Sarete in grado di dire cosa fare per ogni opzione di menu. Andrà a sostituire il “onClick” opzione di definizione e sarà chiamato automaticamente.

    OriginaleL’autore Jeje Doudou

  4. 2

    Provare a cambiare ‘questo’ per getActivity().

    public void showPopup(View v) {
        PopupMenu popup = new PopupMenu(getActivity(), v);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.overflow, popup.getMenu());
        popup.show();
    }

    Speranza che aiuta..!!

    Ho provato questo, purtroppo, non funziona
    developer.android.com/resources/samples/ApiDemos/src/com/… . Prova questo, ma credo u r facendo la stessa cosa..

    OriginaleL’autore Rookie

  5. 1

    Ho trovato una soluzione per questo. Invece di usando il menu di XML per gonfiare il menu a comparsa, ho fatto un file di layout XML.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#8b8989"
    android:orientation="vertical"
    android:padding="10dip" >
    
    <TextView
        android:id="@+id/menuItem1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/menu1" />
    
    <TextView
        android:id="@+id/menuItem2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/menu2" />
    <TextView
        android:id="@+id/menuItem3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/menu3" />
    </LinearLayout> 

    e ho cambiato il metodo onClick

    public void showPopup(View v) {
        LayoutInflater inflater = (LayoutInflater) MainActivity.this
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            PopupWindow pw = new PopupWindow(inflater.inflate(
                    R.layout.overflow_layout, null, false), 300, 400, true);
            pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0,
                    0);
    }

    Questo ha risolto il problema

    Io non trovo che questa sia una buona soluzione.
    gonfiare un layout di ogni singola volta che è costoso. c’è un molto più pulito, efficiente e robusto modo per fare questo. Guarda la mia risposta

    OriginaleL’autore darsh

  6. 0
    android:onClick="popup"

    può essere che si dovrebbe cambiare per android:onClick="showPopup"?

    oh, mi dispiace che è stato un errore nella domanda. La sua realtà è la stessa cosa, sto modificando la domanda

    OriginaleL’autore user1049280

Lascia un commento