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

时间:2011-11-26 16:49:54

标签: android android-actionbar

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

4 个答案:

答案 0 :(得分:128)

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

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

答案 1 :(得分:15)

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

最初将MenuItem添加到菜单,但将可见性设置为 false 。 使用MenuItem.setVisible()

,在需要时将可见性设置为 true

答案 2 :(得分:1)

ActionMode.invalidate()成功了。它导致再次调用onPrepareActionMode()

Activity#invalidateOptionsMenu() 导致在使用具有多选的列表项时调用onPrepareActionMode()

答案 3 :(得分:1)

Activity.invalidateOptionsMenu()需要API级别11.使用支持库版本supportInvalidateOptionsMenu()

AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();