java – 如何强制onPrepareOptionsMenu方法触发?

在我的活动的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.

原文 

https://codeday.me/bug/20190113/520015.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java – 如何强制onPrepareOptionsMenu方法触发?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址