如何在android中动态添加菜单中的项目

时间:2015-04-20 09:08:49

标签: android menu

我想动态添加菜单项。我有这样的菜单:

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

    <item
        android:id="@+id/allItems"
        android:showAsAction="always"
        android:title="@string/trackAll"/>
    <item
        android:id="@+id/specficItems"
        android:showAsAction="always"
        android:title="@string/trackSpecific"/>
    <item
        android:id="@+id/favItems"
        android:showAsAction="always"
        android:title="@string/trackFav"/>

</menu>

我尝试将项目添加到favItems。 但是当我尝试这样的时候:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.admin_menu, menu);

    MenuItem item=menu.findItem(R.id.favItems);

    menu.add(0, MY_MENU_1, 0, "Item 1").setShortcut('3', 'c');
    menu.add(0, MY_MENU_2, 0, "Item 2").setShortcut('4', 's');
    menu.add(0, MY_MENU_3, 0, "Item 3").setShortcut('5', 'z');
    return true;
}

输出结果如下: enter image description here

但我想将这些项目添加到favItems

请让我知道在favItems动态添加项目的任何想法。

如果我这样做:

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {    
    menu.add(0, MY_MENU_1, 0, "Item 1").setShortcut('3', 'c');
    menu.add(0, MY_MENU_2, 0, "Item 2").setShortcut('4', 's');
    menu.add(0, MY_MENU_3, 0, "Item 3").setShortcut('5', 'z');
    return super.onPrepareOptionsMenu(menu);
    }

op就像这样:

enter image description here

2 个答案:

答案 0 :(得分:0)

使用:onPrepareOptionsMenu(Menu menu)

  

准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。

// Gets called everytime, when menu button is pressed
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.clear(); //Empty's your menu
    menu.add();  // adding your item

    super.onPrepareOptionsMenu(menu);
    return true;
}

编辑添加一个项目,因为您之前做了一些事情......您可以使用:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(IWantToAddMyItem){
        menu.add(); // your item
        IWantToAddMyItem = false;
    }

    super.onPrepareOptionsMenu(menu);
    return true;
}

答案 1 :(得分:0)

现在您只需将项目添加到menu

尝试这样做:

 MenuItem item = menu.findItem(R.id.favItems);
 SubMenu sub = item.getSubMenu();

 sub.add(0, MY_MENU_1, 0, "Item 1").setShortcut('3', 'c');
 sub.add(0, MY_MENU_2, 0, "Item 2").setShortcut('4', 's');
 sub.add(0, MY_MENU_3, 0, "Item 3").setShortcut('5', 'z');

编辑:

此外,您的favItems应该是这样的:

<item
    android:id="@+id/favItems"
    android:showAsAction="always"
    android:title="@string/trackFav">
    <menu>
    </menu>  
</item>