初始化支持操作工具栏后,片段未充气菜单

时间:2019-01-30 09:49:34

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

我有一个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。但是菜单项并没有膨胀。

对不起,但是由于某些限制,这就是我可以共享的所有代码。请发表您的疑问,我可以尝试在评论中消除它们。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

我有一个解决方案,它可以解决我的处境,但不能解决我的问题。

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