2013-02-06 6 views
37

Ich habe ein ActionBar mit einem Aktionselement. Nach dem Klicken auf das Aktionselement möchte ich ein Popup-Menü anzeigen. Ich habe diese Methode implementiert, aber ich möchte es an die Aktion Element oder an die ActionBar, nicht an eine beliebige Ansicht aus dem Layout zu verankern. Wie bekomme ich eine Art Aussicht, um es von MenuItem zu verankern?Popup-Menü auf `ActionBar`-Element anzeigen Klicken Sie auf

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

Ich mache etwas ähnliches hier !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Antwort

94

So endlich fand ich Lösung. Wenn Sie Popupmenü an ActionItem in ActionBar verankern möchten, müssen Sie eine Ansicht finden, die ActionItem rendert. Einfache Suche mit findViewById(), wo ID ist identisch mit der ID Ihres Menüpunkts in XML.

ANZEIGEND: Pop-up

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> 

Wenn Menüpunkt nicht sichtbar ist (im Überlauf) es funktioniert nicht. findViewById gibt null zurück, daher müssen Sie nach dieser Situation suchen und in einer anderen Ansicht verankern.

+8

findViewById (R.id.menu_overflow) gibt mir eine Null-Ansicht – ingsaurabh

+5

findViewById (R.id.menu_overflow) gibt Null, wenn Sie in nicht Aktivität Stammansicht finden. Verwenden Sie Activity.findViewById (R.id.menu_overflow) und alles ok =)) – maXp

+0

ist es möglich, einen Trenner zwischen bestimmten Elementen im PopupMenu hinzuzufügen? –

-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)); 
    } 

erhalten Sie hier Quelle Form ..

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

+0

Sorry ich möchte richtige Verwendung für PopupMenu finden, wenn ActionItem geklickt wurde. Keine Problemumgehungen. – pcu

+0

Die Frage bezieht sich auf PopupMenu und nicht auf AlertDialog. – JaydeepW