Qua xml Tôi có thể thêm các mục menu con vào hành động của mình trong ActionBar
.Làm thế nào để thêm các mục menu con vào hành động ActionBar trong mã?
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>
Nhưng làm thế nào tôi có thể thêm các mặt hàng này phụ thông qua mã Java? Nó không làm việc như dưới đây, các mặt hàng phụ đang nhận được bổ sung vào hành động sai (và cũng là drawable không được hiển thị), nút rất đúng, không nút 'New Form' của tôi:
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 Code:
@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;
}
có cách nào để đạt được điều này, thêm các mục trình đơn phụ qua Mã Java thay vì XML, mà không cần sử dụng PopupMenu
(http://developer.android.com/guide/topics/ui/menus.html#PopupMenu)?
Cập nhật (Solution):
đoạn mã cuối cùng của tôi tôi đã kết thúc với để cư trú trong menu con tự động, sau bài trả lời adamp của:
// 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;
}
tôi sử dụng này mã cho ứng dụng của tôi @Override \t công khai boolean onCreateOptionsMenu (Menu menu) { \t \t // TODO Phương thức tạo tự động được tạo \t \t super.onCreateOptionsMenu (menu); \t \t MenuInflater inflater = getMenuInflater(); \t \t inflater.inflate (R.menu.poi_menu, menu); \t \t for (int i = 0; i