【问题标题】:Fragment not inflating menu after initializing support action toolbar初始化支持操作工具栏后片段不膨胀菜单
【发布时间】:2019-01-30 09:49:34
【问题描述】:

我有一个没有操作栏主题的 appcompat 活动。我在活动中运行一个片段以显示项目列表。项目以两种模式显示:列表和删除。当屏幕打开时,它始终处于列表模式。两种显示模式中的操作栏是不同的。在列表模式下,在操作栏中,我在右侧有两个菜单项,当片段打开时显示。当我从删除模式回到列表模式时,菜单项不会膨胀。如何在从删除模式到列表模式时使菜单项膨胀。

进入屏幕后,用户进入列表模式。我有 setHasOptionMenu(true);在我的片段中。所以 onCreateOptionMenu 和 onPrepareOtionsMenu 都被调用了,两个菜单项都被正确地膨胀了。

当我从列表模式切换到删除模式时(当您单击左上角操作栏中显示的删除菜单项时会发生这种情况),我会膨胀一个新的自定义视图并从工具栏中删除所有视图然后将此自定义视图添加到工具栏以根据删除模式更改操作栏:

View customView = LayoutInflater.from(getActivity()).inflate(
R.layout.delete_mode_toolbar_layout, null);
Toolbar toolbar = mActionBarHelper.getToolbar();
toolbar.removeAllViews();
toolbar.addView(customView);

它在删除模式下完全可以正常工作。

但现在当我回到列表模式时,我再次这样做。

View customView = LayoutInflater.from(getActivity()).inflate(R.layout.list_mode_toolbar_layout,null);
Toolbar toolbar = mActionBarHelper.getToolbar();
toolbar.removeAllViews();
toolbar.addView(customView);
Objects.requireNonNull((AppCompatActivity)getActivity()).supportInvalidateOptionsMenu();

但是这次在列表模式下,操作栏按照列表模式的自定义工具栏正确显示,并且 oncreateoptionsmenu 和 onprepareoptionsmenu 都被调用。但是菜单项没有膨胀。

抱歉,由于一些限制,这是我可以分享的所有代码。请评论您的疑问,我可以尝试在 cmets 中清除它们。

所以请有人帮我理解为什么菜单项在从删除模式返回到列表模式后没有膨胀。

提前致谢。

【问题讨论】:

    标签: android menu android-toolbar android-appcompat appcompatactivity


    【解决方案1】:

    我有一个解决方法,它可以解决我的情况,但不能解决我的问题。

    现在当从列表切换到删除模式时,首先隐藏工具栏中已经存在的列表模式自定义工具栏布局(通过保留对列表模式自定义工具栏布局的引用),然后膨胀删除模式自定义工具栏布局并添加它使用toolbar.addView(view) 到工具栏。现在,从删除模式再次返回到列表模式时,只需使用 toolbar.removeView(view) 从工具栏中删除自定义删除工具栏布局,然后使已经存在于工具栏中的列表模式工具栏布局可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      相关资源
      最近更新 更多