如何dynamic更改动作栏动作?

我有一个活动与ActionBar和选项卡导航。 我正在使用拆分模式,所以选项卡在顶部,操作在底部栏。 我怎样才能dynamic地改变底部的行动? 我需要这个,因为每个标签都有不同的操作。

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

如果您使用操作栏选项卡来更改片段configuration,则有更好的方法。 让每个片段pipe理自己的部分菜单。 这些片段应该调用setHasOptionsMenu(true) 。 当添加或删除带有选项菜单项的片段时,系统将自动使选项菜单无效,并除了活动之外,还调用每个片段的onCreateOptionsMenu / onPrepareOptionsMenu方法。 这样每个片段可以pipe理自己的项目,你不必担心手工进行菜单切换。

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

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

ActionMode.invalidate()做了诀窍。 它导致onPrepareActionMode()被再次调用。

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

Activity.invalidateOptionsMenu()需要API Level 11.使用SupportInvalidateOptionsMenu()的支持库版本。

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