如何动态更改操作栏操作?

fhu*_*cho 61 android android-actionbar

我有一个带ActionBar的活动和标签导航.我正在使用拆分模式,因此选项卡位于顶部,操作位于底部栏中.如何动态更改底部操作?我需要这个,因为每个标签都有不同的动作.

ada*_*amp 128

由于操作由活动的选项菜单填充,您可以使用Activity#invalidateOptionsMenu().这将转储当前菜单并再次调用您的活动的onCreateOptionsMenu/ onPrepareOptionsMenu方法来重建它.

如果您使用操作栏选项卡更改片段配置,则有更好的方法.让每个片段管理自己的菜单部分.这些片段应该调用setHasOptionsMenu(true).当添加或删除具有选项菜单项的片段时,除了活动之外,系统将自动使选项菜单无效并调用每个片段的onCreateOptionsMenu/ onPrepareOptionsMenu方法.这样每个片段都可以管理自己的项目,您无需担心手动执行菜单切换.

  • 请注意:根据[文档](http://developer.android.com/guide/topics/fundamentals/fragments.html#ActionBar),应在onCreate中调用setHasOptionsMenu(). (17认同)
  • 如果您已经使用true调用它并且想要更新它们,则调用setHasOptionsMenu不起作用.至少这与Android支持库v4失败了.在这种情况下,使用getActivity().supportInvalidateOptionsMenu()这就是setHasOptionsMenu内部所做的事情. (16认同)
  • 我同意你的观点,但是文件并没有让它听起来像那样."但是,为了使此方法接收调用,您必须在onCreate()..."期间调用setHasOptionsMenu().我认为他们的意思是你必须调用setHasOptionsMenu(),但他们无意中使它听起来像在onCreate()期间也是一个要求. (2认同)
  • 那是对的.如果某些内容发生了变化,则选项菜单无效. (2认同)

小智 15

Activity.invalidateOptionsMenu()需要API级别11.有一个更简单的解决方案,它向后兼容:

最初将MenuItem添加到Menu,但将其可见性设置为false.使用MenuItem.setVisible()在需要时将可见性设置为true