Android: Получить представление Ссылка на пункт меню

Я планирую использовать шаблон пользовательского интерфейса быстрого действия в своем приложении. Шаблон пользовательского интерфейса для быстрых действий Android . Окно быстрого действия требует поворотного представления.

quickAction.show(View pivotView); 

Я намерен использовать быстрое действие для пункта меню, я могу получить доступ к элементу, который нажал. Но проблема в том, что мне нужно ссылаться на представление из элемента меню, чтобы я мог передать его быстрому действию.

Как я могу получить ссылку на представление в выбранном элементе menuItem.

Solutions Collecting From Web of "Android: Получить представление Ссылка на пункт меню"

Вы можете добиться этого, предоставив свой пункт меню с свойством actionViewClass в xml, а затем вы сможете получить развернутый вид, который вам нужен. Код будет что-то вроде этого

 <item android:id="@+id/menu_find" android:showAsAction="ifRoom" android:actionViewClass="android.widget.ImageButton" /> 

В своем OnCreateOptionsMenu сделайте это

 public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu_search, menu); locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView(); locButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub createPopup(); mQuickAction.show(v); } }); return true; } 

Старый вопрос, но я столкнулся с некоторыми проблемами с атрибутом actionViewClass . Для тех, кто сталкивается с этим позже …

Вызов findViewById(R.id.mnu_item) в onOptionsItemSelected вернет анкер View .

QuickActions на MenuItems не очень хороший дизайн, но я обнаружил, что это самый простой способ реализовать подменю с пользовательскими фонами.

Обновление для тех, кто хочет найти элемент меню, по другим причинам (например, я хотел).

Если у вас есть доступ к панели инструментов AppCompat и ее использование, есть способ. Это не самый эффективный способ, но это самый простой способ найти доступ к представлению элемента меню.

 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); // Find Menu for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) { View view = toolbar.getChildAt(toolbarChildIndex); // Found Menu if (view instanceof ActionMenuView) { ActionMenuView menuView = (ActionMenuView) view; // All menu items for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) { ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex); // Do something to itemView... } } } } 

В основном классе активности, лучше всего переопределить метод onOptionsItemSelected (…); Должно быть следующим:

 public boolean onOptionsItemSelected(MenuItem item) { // the id is of type int int someId = item.getItemId(); // can use an if() or switch() statement to check if id is selected //a Toast message can be used to show item is selected }