2016-12-20 3 views
0

Поскольку этот вопрос и его ответ нигде не появлялись, я подумал, что могу внести свой вклад немного, разделив так, как я нашел.

Так что я имел этот вопрос с помощью анкерных объекта PopupMenu в меню NavigationView, так как я не мог получить все детали из него в виде зрения:
Закрепление пунктов меню PopupMenu для навигации.

//onCreate: 
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     drawerMenu = navigationView.getMenu(); 


//onNavigationItemSelected(MenuItem menuItem): 
    switch (menuItem.getItemId()) { 
       case R.id.menubutton_submenuButton: 
        //the following line is merely how I'd imagine it should be 
        PopupMenu popupMenu = new PopupMenu(this, drawerMenu.findItem(R.id.menubutton_submenuButton)); 
        popupMenu.getMenuInflater().inflate(R.menu.sub_menu, popupMenu.getMenu()); 
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
         @Override 
         public boolean onMenuItemClick(MenuItem item) { 
          //handle the inflated menu's buttons here 
          return true; 
         } 
        }); 
        popupMenu.show(); 
        break; 
    } 

Итак, проблема в основном, где

drawerMenu.findItem(R.id.menubutton_submenuButton)); 

не Просмотр любого рода, который оставляет PopupMenu ни с чем якорь.

ответ

0

Так я понял, что вы можете просто создать пустой вид внутри пункта меню следующим образом: создать файл макета XML, включая только следующее:

<?xml version="1.0" encoding="utf-8"?> 
<View 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    /> 

позволяет называть его «view_empty».

Теперь пункт меню должен иметь, что пустой макет вида включены в него, добавив следующую строку в его пункт: app:actionLayout="@layout/drawer_empty"
Мой деталь выглядит следующим образом:

<item 
       android:id="@+id/menubutton_submenuButton" 
       android:title="example menu item" 
       app:actionLayout="@layout/view_empty"/> 

Итак, все, что осталось просто использовать его:

//onNavigationItemSelected(MenuItem menuItem) { 
     switch (menuItem.getItemId()) { 
      case R.id.menubutton_submenuButton: 
       MenuItem item = drawerMenu.findItem(R.id.menubutton_submenuButton); 
       PopupMenu popupMenu = new PopupMenu(this, MenuItemCompat.getActionView(item)); 
       popupMenu.getMenuInflater().inflate(R.menu.sub_menu, popupMenu.getMenu()); 
       popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        @Override 
        public boolean onMenuItemClick(MenuItem item) { 
         //handle the inflated menu's buttons here 
         return true; 
        } 
       }); 
       popupMenu.show(); 
       break; 

что станет теперь, что PopupMenu подкрепили себя невидимой точки зрения внутри MENUITEM, что делает его похожим на контейнер MENUITEM является точкой привязки.

Смежные вопросы