在我的活动的onCreateOptionsMenu方法中,我只是给我的菜单布局文件充气并附加它.
我想基于全局变量的值a显示/隐藏一些菜单项,我在onPrepareOptionsMenu方法中执行此操作.我已经读到这是正确的做法.
我的onPrepareOptionsMenu方法并不总是触发.我不知道为什么,但是当我按下手机上的“菜单”按钮时,它并不总是触发.也许它与内部状态有关.
在创建Acitvity时似乎会触发它.第一次按“菜单”按钮不会导致它激活,但如果我再次按下菜单按钮,它就可以正常工作.
有没有办法可以强制onPrepareOptionsMenu触发.
谢谢
Smok建议使用invalidateOptionsMenu方法使菜单项无效,但这会导致onCreateOptionsMenu方法也被触发.这是我的方法:
@Override public boolean onCreateOptionsMenu(Menu menu) { System.out.println("onCreate"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.search, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconified(false); searchView.requestFocusFromTouch(); return true; } @Override public boolean onPrepareOptionsMenu (Menu menu) { System.out.println("prepared"); if (this.objAdapter == null) { menu.findItem(R.id.sort).setVisible(false); menu.findItem(R.id.filter).setVisible(false); menu.findItem(R.id.group).setVisible(false); } else { menu.findItem(R.id.sort).setVisible(true); menu.findItem(R.id.filter).setVisible(true); menu.findItem(R.id.group).setVisible(true); } return true; }
从我的onCreateOptionsMenu方法中可以看到,再次调用它会导致焦点丢失到SearchView.