2013-11-19 3 views
4

Я просто не могу заставить ActionProvider показать подменю, и я не понимаю, почему. Я мое меню определены в XML:Android ActionBar ActionProvider подменю

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

<item 
     android:id="@+id/dossier_menu" 
     android:showAsAction="always" 
     android:actionProviderClass="com.some.other.mockup.MActionProvider"> 
</item> 
</menu> 

действия класса Поставщик:

public class MActionProvider extends ActionProvider { 

private static final String TAG = "MActionProvider"; 
private static final int LIST_LENGTH = 3; 
private Context context; 

/** 
* Creates a new instance. 
* 
* @param context Context for accessing resources. 
*/ 
public MezzActionProvider(Context context) { 
    super(context); 
    this.context = context; 
} 

@Override 
public View onCreateActionView() { 
    View view = View.inflate(context, R.layout.action_layout, null); 
    //view must be returned not tetxView or just buttonView 
    return view; 
} 

@Override 
public boolean hasSubMenu() { 
    Log.d(TAG, "hasSubMenu"); 
    return true; 
} 


@Override 
public boolean onPerformDefaultAction() { 
    Log.d(TAG, "onPerformDefaultAction"); 
    return super.onPerformDefaultAction(); 
} 

/**add submenu in code**/ 
@Override 
public void onPrepareSubMenu(SubMenu subMenu) { 
    Log.d(TAG, "onPrepareSubMenu"); 

    subMenu.clear(); 
    subMenu.add(Menu.NONE, Menu.NONE, 1,"Mezz 1"); 
    subMenu.add(Menu.NONE, Menu.NONE, 2, "Mezz 2"); 

} 

} 

и расположение действия:

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Mezz State ++" 
     android:id="@+id/textView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="4dp"/> 
<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/buttonHeight" 
     android:src="@android:drawable/ic_menu_add" 
     android:layout_alignParentLeft="true" 
     android:id="@+id/img1" 
     android:layout_below="@id/textView"/> 

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

Благодаря

ответ

2

Я нашел ответ здесь:

Can't display sub-menu for custom ActionProvider

Проблема мой метод onCreateActionView() не возвращает нуль.

Так благодаря Джейсон Робинсон ответить вот как:

@Override 
public View onCreateActionView() { 
    View view = View.inflate(context, R.layout.action_layout, null); 

    final PopupMenu menu = new PopupMenu(mContext, view); 
    menu.inflate(R.menu.submenu); 
    menu.setOnMenuItemClickListener(this); 

    view.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v){ 
     menu.show(); 
    } 
    }); 

return view; 
} 

и submenu.xml содержит:

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
      android:id="@+id/mezzSub1" 
      android:title="Mezz 1" 
      android:showAsAction="always"></item> 
    <item 
      android:id="@+id/mezzSub2" 
      android:title="Mezz 2" 
      android:showAsAction="always"></item> 

</menu> 
Смежные вопросы