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

发布于 2024-12-18 07:21:37 字数 95 浏览 0 评论 0原文

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

I have an Activity with ActionBar and tab navigation. I am using the split mode, so the tabs are at the top and actions are in the bottom bar. How can I dynamically change the bottom actions? I need this because every tab has different actions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

蓝梦月影 2024-12-25 07:21:37

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

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

Since the actions are populated by the activity's options menu you can use Activity#invalidateOptionsMenu(). This will dump the current menu and call your activity's onCreateOptionsMenu/onPrepareOptionsMenu methods again to rebuild it.

If you're using action bar tabs to change your fragment configuration there's a better way. Have each fragment manage its own portion of the menu. These fragments should call setHasOptionsMenu(true). When fragments that have options menu items are added or removed the system will automatically invalidate the options menu and call to each fragment's onCreateOptionsMenu/onPrepareOptionsMenu methods in addition to the activity's. This way each fragment can manage its own items and you don't need to worry about performing menu switching by hand.

不回头走下去 2024-12-25 07:21:37

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

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

Activity.invalidateOptionsMenu() requires API Level 11.
There is a simpler solution which is backwards compatible:

Add the MenuItem to the Menu initially but set its visibility to false.
Set visibility to true when desired, using MenuItem.setVisible()

蝶…霜飞 2024-12-25 07:21:37

ActionMode.invalidate() 做到了这一点。它导致再次调用 onPrepareActionMode()

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

ActionMode.invalidate() did the trick. It caused the onPrepareActionMode() to be invoked again.

Activity#invalidateOptionsMenu() did not cause the onPrepareActionMode() to be invoked when using list items with multi-select.

土豪我们做朋友吧 2024-12-25 07:21:37

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

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

Activity.invalidateOptionsMenu() requires API Level 11. Use the Support library version of it supportInvalidateOptionsMenu().

AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文