2013-02-06 14 views
37

Ho uno ActionBar con un elemento azione su di esso. Dopo aver fatto clic sulla voce azione, voglio mostrare un menu popup. Ho implementato questo metodo, ma voglio ancorarlo all'elemento azione o allo ActionBar, non a nessuna vista dal layout. Come ottenere un qualche tipo di vista per ancorarlo da MenuItem?Mostra menu popup sull'elemento `ActionBar` fare clic su

public boolean onOptionsItemSelected(MenuItem item) { 
    PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here? 
    popupMenu.inflate(R.menu.counters_overflow); 
    popupMenu.show(); 
    // ... 
    return true; 
} 
+0

Sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

risposta

94

Così alla fine ho trovato la soluzione. Quando vuoi ancorare popupmenu a ActionItem in ActionBar devi trovare la vista che renderizza ActionItem. Trova semplice visualizzazione con findViewById() dove id è uguale all'ID della voce di menu in xml.

VISUALIZZAZIONE POPUP:

public boolean onOptionsItemSelected(MenuItem item) { 
    // ... 

    View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID 
    PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
    popupMenu.inflate(R.menu.counters_overflow); 
    // ... 
    popupMenu.show(); 
    // ... 
    return true; 
} 

MENU:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    .... 

    <item 
    android:id="@+id/menu_overflow" 
    android:icon="@drawable/ic_overflow" 
    android:showAsAction="ifRoom" 
    android:title="@string/menu_overflow"/> 

    .... 

</menu> 

Se voce di menu non è visibile (è in overflow) non funziona. findViewById restituisce null, quindi è necessario verificare questa situazione e ancorare a un'altra vista.

+8

findViewById (R.id.menu_overflow) mi dà una vista nulla – ingsaurabh

+5

findViewById (R.id.menu_overflow) restituisce null se si trova in non visualizzazione radice attività. utilizzare Activity.findViewById (R.id.menu_overflow) e tutto ok =)) – maXp

+0

è possibile aggiungere un divisore tra elementi specifici nel menu popup? –

-2
public boolean onOptionsItemSelected(MenuItem item) { 
    final View addView = getLayoutInflater().inflate(R.layout.add, null); 

      new AlertDialog.Builder(this).setTitle("Add a Word").setView(addView) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          addWord((TextView) addView.findViewById(R.id.title)); 
         } 
        }).setNegativeButton("Cancel", null).show(); 
return (super.onOptionsItemSelected(item)); 
    } 

ottenere forma sorgente completo qui ..

http://vimaltuts.com/android-tutorial-for-beginners/android-action-bar-tab-menu-example

+0

Spiacente, voglio trovare il giusto utilizzo per PopupMenu creato quando ActionItem ha fatto clic. Nessun rimedio. – pcu

+0

La domanda riguarda PopupMenu e non AlertDialog. – JaydeepW

Problemi correlati