Подтвердить что ты не робот

Показать всплывающее меню в элементе "ActionBar"

У меня есть ActionBar с элементом действия на нем. После нажатия на элемент действия, я хочу показать всплывающее меню. Я реализовал этот метод, но я хочу привязать его к элементу действия или к ActionBar, а не к любому представлению из макета. Как получить какой-то вид, чтобы привязать его к MenuItem?

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

Ответ 1

Итак, я нашел решение. Когда вы хотите привязать popupmenu к ActionItem в ActionBar, вам нужно найти представление, которое отображает ActionItem. Простой поиск с помощью findViewById(), где id совпадает с id вашего пункта меню в xml.

ДИСПЛЕЙ ПОПЕРА:

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

МЕНЮ:

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

Если элемент меню не отображается (находится в переполнении), он не работает. findViewById возвращает null, поэтому вам нужно проверить эту ситуацию и привязать к другому виду.

Ответ 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));
    }

получите полную исходную форму здесь.

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