Как добавить элементы подменю к действию ActionBar в коде?

С помощью xml я могу добавлять элементы подменю к своему действию в ActionBar .

enter image description here

main_menu.xml:



    
        
            
            
        
    

Но как я могу добавить эти подпункты с помощью кода Java ? Это не работает, как показано ниже, подпункты добавляются к неправильному действию (а также не отображается возможность рисования), к самой правой кнопке, а не к моей кнопке «Новая форма»:

enter image description here

main_menu.xml:



    
    

Код 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?

Update (Решение):

Мой последний фрагмент кода, который я получил для динамического заполнения подменю, следуя инструкциям 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;
}

62
задан Mathias Conradt 11 April 2012 в 03:13
поделиться