Android: получить ссылку на пункт меню
Я планирую использовать шаблон быстрого действия UI в своем приложении. Android Быстрые действия UI Pattern . Окно быстрого действия нуждается в представлении pivot, чтобы придерживаться.
quickAction.show(View pivotView);
Я намерен использовать быстрое действие для пункта меню, я могу получить доступ к элементу, который нажат. Но проблема в том, что мне нужно ссылаться на представление из пункта меню, чтобы я мог передать его в быстрое действие.
Как я могу получить ссылку на представление в меню, которое выбранный.
7 ответов
вы можете достичь этого, предоставив свой пункт меню свойством actionViewClass в xml, а затем вы сможете получить сводный вид u хотел. Код будет примерно таким:
<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;
}
старый вопрос, но я столкнулся с некоторыми проблемами с . Для всех, кто столкнется с этим позже...
вызов findViewById(R.id.mnu_item)
на onOptionsItemSelected
вернет View
якорь.
QuickActions
на MenuItems
не очень хороший дизайн, но я обнаружил, что они являются самым простым способом реализации подменю с пользовательским фоном.
Inorder to получить справочные виды пунктов меню мы должны сделать это,
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.section, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View menuItemView = findViewById(R.id.action_preview);
// SOME OF YOUR TASK AFTER GETTING VIEW REFERENCE
}
});
return true;
}
обновление для тех, кто хочет найти пункт меню " Вид " по другим причинам (как я хотел).
Если у вас есть доступ и использовать панель инструментов 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...
}
}
}
}
в основном классе activity лучше всего переопределить 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
}
Вы можете получить ссылку на пункт меню, как это:
MenuItem btnFavorites = menu.findItem(R.id.action_favorite);
а затем делайте с ним все, что хотите. Е. Г. изменить его значок такой:
btnFavorites.setIcon(R.drawable.ic_favorite_false);
внутри onOptionsItemSelected просто получить представление с помощью идентификатора.
посмотреть menuItemView = команду findViewById(Р. ИД.action_sort);
теперь вы можете использовать это представление в соответствии с вашим требованием.