如何子菜单项添加到ActionBar的行动代码?

通过XML,我可以添加子菜单项来我在动作ActionBar

如何子菜单项添加到ActionBar的行动代码?

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_new_form" android:icon="@drawable/ic_new_form" android:title="@string/menu_new_form" android:showAsAction="ifRoom|withText"> <menu> <item android:id="@+id/form1" android:icon="@drawable/attachment" android:title="Form 1" android:onClick="onSort" /> <item android:id="@+id/form2" android:icon="@drawable/attachment" android:title="Form 2" android:onClick="onSort" /> </menu> </item> </menu>

但我怎么能增加通过Java代码,这些分项 ? 子项被添加到该错误的动作(也未示出绘制)不如下工作,非常右边的按钮,不是我的“新表”按钮:

如何子菜单项添加到ActionBar的行动代码?

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_new_form" android:icon="@drawable/ic_new_form" android:title="@string/menu_new_form" android:showAsAction="ifRoom|withText"> </item> </menu>

Java代码:

@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); Log.d("MainMenu", ",menu title0: " + menu.getItem(0).getTitle()); // returns "New Form" menu.addSubMenu(0, Menu.NONE, 1, "Form 1").setIcon(R.drawable.attachment); menu.addSubMenu(0, Menu.NONE, 2, "Form 2").setIcon(R.drawable.attachment); return true; }

有没有办法做到这一点,将通过Java代码,而不是XML子菜单项, 在不使用PopupMenu (http://developer.android.com/guide/topics/ui/menus.html#PopupMenu)?

更新(解决方案):

我最后的代码段我结束了动态填充子菜单,下面adamp的答复:

// menu options private static final int MENU_PREFERENCES = Menu.FIRST; private static final int MENU_LOGOUT = 2; @Override public boolean onCreateOptionsMenu(final Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); menu.add(0, MENU_PREFERENCES, 0, getString(R.string.general_preferences)).setIcon( android.R.drawable.ic_menu_preferences); // load all available form templates Cursor c = managedQuery(FormsProviderAPI.FormsColumns.CONTENT_URI, null, null, null, null); try { int ixDisplayName = c.getColumnIndex(FormsProviderAPI.FormsColumns.DISPLAY_NAME); int ixId = c.getColumnIndex(FormsProviderAPI.FormsColumns._ID); int cnt = 0; while (c.moveToNext()) { cnt++; Log.d("ID: ", "ID: "+ c.getInt(ixId)); // misusing the group id for the form id menu.getItem(1).getSubMenu().addSubMenu(c.getInt(ixId), Menu.NONE, cnt, c.getString(ixDisplayName)).setIcon(R.drawable.attachment_dark); } } catch (Exception e) { Log.e(TAG, "Error init form templates list.", e); } return true; }

--------------解决方案-------------

就在这里。

addSubMenu方法返回一个SubMenu的对象。 一个SubMenu也是一个Menu ,让你可以调用add它来添加项目到子菜单,而不是上一级菜单。 你上面的代码形态1创建两个不同的子菜单,形成一个单一的新形式子菜单中2,而不是两个项目。

例:

SubMenu submenu = menu.addSubMenu(0, Menu.NONE, 1, "New Form").setIcon(R.drawable.ic_new_form);
submenu.add("Form 1").setIcon(R.drawable.attachment);

添加ActionProvider也许更容易。 你可以尝试如下解释

分类:安卓 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.546 (s). 10 q(s)