Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 工具栏菜单显示错误的片段_Android_Android Fragments_Android Actionbar_Android Toolbar_Android Menu - Fatal编程技术网

Android 工具栏菜单显示错误的片段

Android 工具栏菜单显示错误的片段,android,android-fragments,android-actionbar,android-toolbar,android-menu,Android,Android Fragments,Android Actionbar,Android Toolbar,Android Menu,我的主要活动有两个片段->父级和子级,如下所示: 每个片段都应该有自己的操作栏和菜单 我的问题是:为什么应该在子片段中显示的菜单混合在父片段中 Child-Menu-1和Child-Menu-2应该在子片段的菜单内 这就是我所做的: 片段父项: @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState

我的主要活动有两个片段->父级和子级,如下所示:

每个片段都应该有自己的操作栏和菜单

我的问题是:为什么应该在子片段中显示的菜单混合在父片段中

Child-Menu-1和Child-Menu-2应该在子片段的菜单内

这就是我所做的:

片段父项:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_parent, container, false);
    setHasOptionsMenu(true);

    Toolbar myToolbar = (Toolbar) view.findViewById(R.id.tb_parent);
    ((AppCompatActivity)getActivity()).setSupportActionBar(myToolbar);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("PARENT");
    //((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);

    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_parent, menu);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_parent, container, false);
    setHasOptionsMenu(true);

    //Toolbar myToolbar = (Toolbar) view.findViewById(R.id.tb_parent);
    //((AppCompatActivity)getActivity()).setSupportActionBar(myToolbar);
    //((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("PARENT");
    //((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);

    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_parent, menu);
}
碎片儿童:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_child, container, false);
    setHasOptionsMenu(true);

    Toolbar myToolbar = (Toolbar) view.findViewById(R.id.tb_child);
    ((AppCompatActivity)getActivity()).setSupportActionBar(myToolbar);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("CHILD");
    //((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);

    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_child, menu);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_child, container, false);
    setHasOptionsMenu(true);

    Toolbar myToolbar = (Toolbar) view.findViewById(R.id.tb_child);
    ((AppCompatActivity)getActivity()).setSupportActionBar(myToolbar);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("CHILD");
    //((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);

    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_child, menu);
}
我已经尝试过的:


  • 将getSupportActionBar移动到onViewCreated添加或替换
    片段后,是否尝试调用
    无效操作菜单()

    我从该链接找到答案:

    如果我们在一个活动中运行多个工具栏菜单(即使在我的例子中是在不同的片段中)

  • 对于第一个工具栏,充气来自onCreateOptionsMenu(),回调来自onOptionsItemSelected()

  • 对于第二个工具栏,我们需要通过将第二个菜单工具栏充气并手动设置回调:

    toolbar2 = (Toolbar) findViewById(R.id.tool_bar_bottom);
    toolbar2.inflateMenu(R.menu.bottom_menu);//changed
    toolbar2.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    
        @Override
        public boolean onMenuItemClick(MenuItem arg0) {
            if(arg0.getItemId() == R.id.item_id){
    
            }
            return false;
        } 
    });
    

  • 谢谢@skadoosh。

    嗨,谢谢你的建议,你能说得更具体些吗?我应该将InvalidateOptions菜单()放在哪里?我根据布局创建了片段,因此它不是动态添加/替换的。我已经尝试放置getActivity().InvalidateOptions菜单();在onViewCreated或OnCreateOptions菜单中,如果结果仍然相同,请检查下面的说明