【发布时间】:2011-11-26 16:49:53
【问题描述】:
我有一个带有 ActionBar 和标签导航的 Activity。我正在使用拆分模式,因此选项卡位于顶部,操作位于底部栏中。如何动态更改底部操作?我需要这个,因为每个选项卡都有不同的操作。
【问题讨论】:
我有一个带有 ActionBar 和标签导航的 Activity。我正在使用拆分模式,因此选项卡位于顶部,操作位于底部栏中。如何动态更改底部操作?我需要这个,因为每个选项卡都有不同的操作。
【问题讨论】:
由于操作由活动的选项菜单填充,您可以使用Activity#invalidateOptionsMenu()。这将转储当前菜单并再次调用您的活动的onCreateOptionsMenu/onPrepareOptionsMenu 方法来重建它。
如果您使用操作栏选项卡来更改片段配置,则有更好的方法。让每个片段管理自己的菜单部分。这些片段应该调用setHasOptionsMenu(true)。当添加或删除具有选项菜单项的片段时,系统将自动使选项菜单无效,并调用每个片段的onCreateOptionsMenu/onPrepareOptionsMenu 方法以及活动的方法。这样每个片段都可以管理自己的项目,您无需担心手动执行菜单切换。
【讨论】:
Activity.invalidateOptionsMenu() 需要 API 级别 11。 有一个向后兼容的更简单的解决方案:
最初将 MenuItem 添加到菜单,但将其 visibility 设置为 false。 在需要时将可见性设置为 true,使用 MenuItem.setVisible()
【讨论】:
MenuItem refreshItem = menu.findItem(R.id.action_refresh); refreshItem.setVisible(false);放在你的onCreateOptionsMenu
"android:visible"="false" 在 xml 中
ActionMode.invalidate() 成功了。它导致onPrepareActionMode() 再次被调用。
Activity#invalidateOptionsMenu() 确实不导致在使用多选列表项时调用onPrepareActionMode()。
【讨论】:
Activity.invalidateOptionsMenu() 需要 API 级别 11。使用它的支持库版本supportInvalidateOptionsMenu()。
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();
【讨论】: