I can't resolve this problem for 3 days. I have simple XML resource for menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/categoryEditButton"
android:title="@string/edit"
android:icon="@drawable/edit" />
<item android:id="@+id/categoryMoveUpButton"
android:title="@string/move_up"
android:icon="@drawable/up" />
<item android:id="@+id/categoryMoveDownButton"
android:title="@string/move_down"
android:icon="@drawable/down" />
<item android:id="@+id/categoryDeleteButton"
android:title="@string/delete"
android:icon="@drawable/trash" />
</menu>
I want to receive List<MenuItem> after parsing of this XML:
public class MenuItem {
private CharSequence text;
private Drawable image;
private int actionTag;
//... getters and setters ...
}
I need this for non-standard manipulations with MenuItems and can't work with this Resourse with standard methods like:
...
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.some_menu, menu);
...
Can anybody help me with this? Thanks.
This will help:
...
PopupMenu p = new PopupMenu(this, null);
Menu menu = p.getMenu();
getMenuInflater().inflate(R.menu.some_menu, menu);
//Usage of menu
System.out.println("LOG id: "+ menu.getItem(0).getItemId());
System.out.println("LOG title: "+ menu.getItem(0).getTitle());
System.out.println("LOG icon: "+ menu.getItem(0).getIcon());
...
The creation of a PopupMenu its just a trick to create a Menu object that when inflated will be filled with the information defined on your xml.
Thanks Raul. It don't work for 2.33. I have found solution Here.
private Menu newMenuInstance(Context context) {
try {
Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class);
return (Menu) constructor.newInstance(context);
} catch (Exception e){
MyLog.GetMyLog().e(e);
}
return null;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With