在我的活动的onCreateOptionsMenu方法中,我只是导入我的菜单布局文件并附加它。
我想要根据全局变量的值显示/隐藏一些菜单项,在onPrepareOptionsMenu方法中完成。我已经阅读到这是正确的做法。
我的onPrepareOptionsMenu方法不总是会触发。我不知道为什么,但当我按下手机上的“菜单”按钮时,它并不总是会触发。也许它与它的内部状态有关。
似乎在创建Activity时会触发它。第一次按下“菜单”按钮不会使其触发,但如果我第二次按下菜单按钮,它就能正常工作。
有没有办法强制onPrepareOptionsMenu触发?
感谢。
Smok建议使用invalidateOptionsMenu方法来使菜单项失效,但这会导致onCreateOptionsMenu方法也触发。以下是我的方法:
我想要根据全局变量的值显示/隐藏一些菜单项,在onPrepareOptionsMenu方法中完成。我已经阅读到这是正确的做法。
我的onPrepareOptionsMenu方法不总是会触发。我不知道为什么,但当我按下手机上的“菜单”按钮时,它并不总是会触发。也许它与它的内部状态有关。
似乎在创建Activity时会触发它。第一次按下“菜单”按钮不会使其触发,但如果我第二次按下菜单按钮,它就能正常工作。
有没有办法强制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
。
onCreateOptionMenu
方法出现某些原因而被触发。我正在此方法中实例化我的SearchView
并将焦点设置为SearchView
,以便用户可以开始搜索。如果需要invalidateOptionsMenu
来引发onPrepareOptionsMenu
,则onCreateOptionsMenu
也会被触发,焦点会回到SearchView
。似乎是一个进退两难的局面。还有其他建议吗? - Mridang Agarwalla