初始化支持操作工具栏后片段不膨胀菜单
Fragment not inflating menu after initializing support action toolbar
我有一个没有操作栏主题的 appcompat activity。我在 运行 片段里面 activity 显示了一个项目列表。项目以两种模式显示:列表和删除。当屏幕打开时,它始终处于列表模式。操作栏在两种显示模式中是不同的。在列表模式下,在操作栏中,右侧有两个菜单项,当片段打开时显示。当我从删除模式返回到列表模式时,菜单项并没有膨胀。如何让菜单项在从删除模式到列表模式时膨胀。
进入屏幕后,用户进入列表模式。我有 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。但是菜单项没有膨胀。
抱歉,由于某些限制,这是我可以分享的所有代码。有疑惑请评论,我可以在评论中尝试解答。
所以请有人帮我理解为什么从删除模式返回到列表模式后菜单项没有膨胀。
提前致谢。
我找到了解决方法,它可以解决我的情况,但不能解决我的问题。
现在,当从列表模式转到删除模式时,首先隐藏工具栏中已经存在的列表模式自定义工具栏布局(通过保留对列表模式自定义工具栏布局的引用),然后膨胀删除模式自定义工具栏布局和使用 toolbar.addView(view) 将其添加到工具栏。现在,当再次从删除模式返回到列表模式时,只需使用 toolbar.removeView(view) 从工具栏中删除自定义删除工具栏布局,然后使列表模式工具栏布局(已经存在于工具栏中)可见。
我有一个没有操作栏主题的 appcompat activity。我在 运行 片段里面 activity 显示了一个项目列表。项目以两种模式显示:列表和删除。当屏幕打开时,它始终处于列表模式。操作栏在两种显示模式中是不同的。在列表模式下,在操作栏中,右侧有两个菜单项,当片段打开时显示。当我从删除模式返回到列表模式时,菜单项并没有膨胀。如何让菜单项在从删除模式到列表模式时膨胀。
进入屏幕后,用户进入列表模式。我有 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。但是菜单项没有膨胀。
抱歉,由于某些限制,这是我可以分享的所有代码。有疑惑请评论,我可以在评论中尝试解答。
所以请有人帮我理解为什么从删除模式返回到列表模式后菜单项没有膨胀。
提前致谢。
我找到了解决方法,它可以解决我的情况,但不能解决我的问题。
现在,当从列表模式转到删除模式时,首先隐藏工具栏中已经存在的列表模式自定义工具栏布局(通过保留对列表模式自定义工具栏布局的引用),然后膨胀删除模式自定义工具栏布局和使用 toolbar.addView(view) 将其添加到工具栏。现在,当再次从删除模式返回到列表模式时,只需使用 toolbar.removeView(view) 从工具栏中删除自定义删除工具栏布局,然后使列表模式工具栏布局(已经存在于工具栏中)可见。