Android 在oncreate或onresume中获取菜单项
我需要禁用特定功能上的菜单项,我已尝试使用一些代码,如:Android 在oncreate或onresume中获取菜单项,android,menuitem,Android,Menuitem,我需要禁用特定功能上的菜单项,我已尝试使用一些代码,如: public class ExampleActivity extends AppCompatActivity Menu menu; 然后分配给这里 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); this.menu = menu; return t
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);
或:
但我总是会崩溃:
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)
或:
我调用:menu.findItem(R.id.avviapc).setEnabled(false)如果if中的特定值为true,则代码>onCreate或onResume
如果在活动开始后2/3秒后调用,则使用手动按钮启动代码。MenuItem.getItem(index)获取菜单项的索引。如果要使用id引用项目,请使用MenuItem.findItem:
avviopc=menu.findItem(R.id.avviapc)//项目id
avviopc=menu.getItem(indexofaviopc)//项目索引在onCreateOptions菜单
中调用您的方法以解决索引错误:
avviopc= menu.findItem(R.id.avviapc); // Do not use getItem(position)
但是如果您也知道菜单项的位置,让我们假设它们是三个,您想要第三个,然后:
avviopc = menu.getItem(2);
说明:
getItem(int)
需要该菜单项的位置。
findItem(int)
需要菜单项的资源id
。在oncreate和onresume=)之后调用菜单。问题不在于此,正如您从代码中看到的那样,我使用不同的替代方案,问题总是一样的:尝试调用接口方法“android.view.MenuItem android.view.menu.findItem(int)'在空对象引用上当菜单已膨胀时,任何内容都不会为空。试着去别的地方看看。我相信可能在某个地方出现了错误。菜单总是下一个oncreate和onresume,但我调用onresume中的菜单,它是空的。。。你当时不明白这个问题。07-18 18:29:21.629 20183-20183/?I/onCreate:07-18 18:29:21.719 20183-20183/?I/onStart:07-18 18:29:21.719 20183-20183/?I/ON简历:07-18 18:29:21.739 20183-20183/?I/OnCreateOptions菜单:数组IndexOutOfBoundsException
我确信这就是它的调用方式问题不是这样的,从代码中可以看出,我使用不同的替代方案,问题总是一样的:尝试在空对象引用上调用接口方法“android.view.MenuItem android.view.Menu.findItem(int)”
avviopc= menu.findItem(R.id.avviapc); // Do not use getItem(position)
avviopc = menu.getItem(2);