【发布时间】:2017-09-03 05:20:23
【问题描述】:
我的 main_activity 有 2 个片段 -> Parent 和 Child 如下:
每个片段都应该有自己的操作栏和自己的菜单。
我的问题是:为什么应该在子片段中显示的菜单混合到父片段中?
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_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
将inflate移到onPrepareOptionsMenu
我注意到,如果我从父片段中删除菜单,子菜单会正确显示,只有当我尝试使用自己的菜单加载每个菜单时才会出现问题。
当我调试应用程序时,调用的顺序是:
调用子片段 onCreateView
调用父片段 onCreateView
调用子 onCreateOptionsMenu
调用父级 onCreateOptionsMenu
所以我怀疑问题出在 onCreateOptionMenu 中,其中充气器充气了错误的片段。
我已经在 SO 和 google 中进行了大量搜索,但没有任何问题与我的情况相似。
非常感谢您!
================================================ =============================
进一步检查和测试...所以我从父片段中注释掉了工具栏的创建:
片段父级:
@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);
}
结果:
所有菜单项都显示在子片段中,为什么在没有声明工具栏的情况下调用父片段 onCreateOptionMenu?
我在这里碰壁了:(
【问题讨论】:
-
我找到了答案,看看下面的解释
标签: android android-fragments android-actionbar android-toolbar android-menu