2013-02-06 9 views
37

Mam ActionBar z elementem akcji na nim. Po kliknięciu elementu akcji, chcę wyświetlić menu podręczne. Zaimplementowałem tę metodę, ale chcę zakotwiczyć ją do elementu akcji lub do ActionBar, a nie do widoku z układu. Jak uzyskać widok do zakotwiczenia go z MenuItem?Pokaż menu kontekstowe w pozycji `ActionBar` kliknij

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

Robię coś podobnego TUTAJ !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Odpowiedz

94

Więc w końcu znalazłem rozwiązanie. Aby zakotwiczyć popupmenu do ActionItem w ActionBar, musisz znaleźć widok, który renderuje ActionItem. Prosty widok z findViewById() gdzie id jest taki sam jak id pozycji menu w xml.

DISPLAYING 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> 

Jeśli pozycja menu nie jest widoczny (jest przelewem) nie działa. findViewById zwraca null, więc musisz sprawdzić tę sytuację i zakotwicz ją w innym widoku.

+8

findViewById (R.id.menu_overflow) daje mi zerowy widok – ingsaurabh

+5

findViewById (R.id.menu_overflow) daje wartość null, jeśli znajduje się w widoku głównym nie aktywności. użyj Activity.findViewById (R.id.menu_overflow) i wszystko ok =)) – maXp

+0

czy można dodać dzielnik między określonymi elementami w popupMenu? –

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

uzyskać pełną formę źródłowy tutaj ..

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

+0

Przepraszam, że chcę znaleźć właściwe użycie dla PopupMenu utworzonego po kliknięciu ActionItem. Bez obejść. – pcu

+0

Pytanie dotyczy PopupMenu, a nie AlertDialog. – JaydeepW

Powiązane problemy