在 oncreate 或 onresume 中获取菜单项

get menuitem in oncreate or onresume

我需要禁用特定功能的菜单项,我已经尝试过一些代码,例如:

public class ExampleActivity extends AppCompatActivity
    Menu menu;

然后在这里赋值

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    this.menu = menu;
    return true;
}

然后使用分配的菜单对象获取所需的项目

menu.findItem(R.id.avviapc).setEnabled(false);

或:

MenuItem avviopc;

public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.right_home, menu);
        avviopc = menu.getItem(R.id.avviapc);
        return true;
    }

avviopc.setEnabled(false);

但我总是崩溃:

java.lang.IndexOutOfBoundsException: Index: 2131296295, Size: 3
                      at java.util.ArrayList.get(ArrayList.java:411)
                      at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:741)

或:

Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference

我调用:menu.findItem(R.id.avviapc).setEnabled(false); onCreate 或 onResume 如果 if 中的特定值为真。

如果在 activity 启动手动按钮后 2/3 秒后调用代码工作。

MenuItem.getItem(index) 获取菜单项的索引。如果您想使用 id 来引用该项目,请使用 MenuItem.findItem:

avviopc=menu.findItem(R.id.avviapc); //项目编号

avviopc=menu.getItem(indexOfavviopc); //项目索引

onCreateOptionsMenu中调用你的方法来解决索引错误:

avviopc= menu.findItem(R.id.avviapc); // Do not use  getItem(position)

但是,如果您也知道菜单项的位置,假设它们是三个,那么您想要第三个:

avviopc = menu.getItem(2);

说明:

getItem(int) 想要该菜单的菜单项的位置。

findItem(int) 想要菜单项的资源 id

菜单在oncreate和onresume之后调用=)