toolbar.inflateMenu()在第二次调用中不起作用?

时间:2016-05-04 09:24:15

标签: android android-fragments android-toolbar

背景:我需Customize ToolBar Fragment setCustomToolBarForFragment所以我使用Fragment方法来实现这个目标(问题发生在里面片段B Fragment A - > Fragment B)

问题:第一次创建setCustomToolBarForFragment B private void setCustomToolBarForFragment() { Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); // CustomView View customToolBar = getActivity().getLayoutInflater().inflate(R.layout.toolbar_custom_view, null); ((TextView) customToolBar.findViewById(R.id.tool_bat_title)).setText("Filter Criteria"); ((ImageView) customToolBar.findViewById(R.id.icon_left)).setVisibility(View.GONE); ((ImageView) customToolBar.findViewById(R.id.icon_right)).setVisibility(View.GONE); toolbar.removeAllViews(); toolbar.inflateMenu(R.menu.menu_event_detail); toolbar.addView(customToolBar); } 按预期工作,但第二次没有。

片段B首次创建(A-> B):

enter image description here

片段B第二次创建(A-> B)

enter image description here

setCustomToolBarForFragment [code]

setCustomToolBarForFragment

注意: onActivityCreated来自.z-index-0{ index: 0; }

2 个答案:

答案 0 :(得分:0)

尝试在setCustomToolBarForFragment()或片段的onResume()onCreate()中调用您的方法onCreatView()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setCustomToolBarForFragment();

}

问题的原因是onActivityCreated()正如名称所述,这是在活动onCreate()完成后调用的。

所以我认为当你恢复片段时它不会改变你的Ui。

答案 1 :(得分:0)

工具栏有 菜单private ActionMenuView mMenuView。当您致电.inflateMenu()时,内部工具栏调用ensureMenuView(),如果尚未创建,则创建menuView并添加视图:

private void ensureMenuView() {
    if (mMenuView == null) {
        mMenuView = new ActionMenuView(getContext());
       .........
        addSystemView(mMenuView, false);
    }
} 

当您调用toolbar.removeAllViews()时,工具栏会删除mMenuView但不会使其为null。因此,下次调用inflateMenu()时,menuView已经创建,不会再次添加到工具栏中。您必须在不使用removeAllViews();

的情况下找到不同的方法