2016-09-18 7 views
0

Я хочу использовать меню из библиотеки поддержки Android. И я хочу создать контекстное меню для элемента, когда я долго нажимаю на него. Я уже пробовал this, но ничего не происходит. Я знаю, что я могу использовать Custom Layout в элементе Nav, но элементы по умолчанию выглядят довольно красиво, поэтому я хотел бы работать с ними.Создать контекстное меню для пункта меню

Вот мой menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:title="SubMenuTitle"> 

      <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/myId" 
        android:icon="@drawable/ic_menu_camera" 
        android:title="SubMenuItem" 
        /> 
      </group> 
      </menu> 

     </item> 
     <item 
      android:id="@+id/nav_gallery" 
      android:clickable="true" 
      android:icon="@drawable/ic_menu_gallery" 
      android:title="Gallery" /> 
     <item 
      android:id="@+id/nav_slideshow" 
      android:icon="@drawable/ic_menu_slideshow" 
      android:title="Slideshow" /> 
     <item 
      android:id="@+id/nav_manage" 
      android:icon="@drawable/ic_menu_manage" 
      android:title="Tools" /> 
    </group> 

    <item android:title="Communicate"> 
     <menu> 
      <item 
       android:id="@+id/nav_share" 
       android:icon="@drawable/ic_menu_share" 
       android:title="Share" /> 
      <item 
       android:id="@+id/nav_send" 
       android:icon="@drawable/ic_menu_send" 
       android:title="Send" /> 
     </menu> 
    </item> 

</menu> 

И некоторый код

public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     //getMenuInflater().inflate(R.menu.activity_menu_drawer, menu); 
     for(int i = 0; i < menu.size(); i++){ 
      View v = new View(this); 
      registerForContextMenu(v); 
      v.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        //Your longclick listener callback logic goes here 
        Log.d("dbg", "longClicked"); 
        popup(v); 
        return false; 
       } 

      }); 
      menu.getItem(i).setActionView(v); 
     } 
     return true; 
    } 


private void popup(View v){ 
    PopupMenu pMenu = new PopupMenu(this, v); 
    pMenu.inflate(R.menu.popup_menu); 
    pMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ 
     @Override 
     public boolean onMenuItemClick(MenuItem item){ 
      Toast.makeText(MenuActivity.this, item.toString(), Toast.LENGTH_LONG).show(); 
      return true; 
     } 

    }); 
} 

ответ