Android OnCreateOptions菜单内部片段
我已经将Android OnCreateOptions菜单内部片段,android,android-fragments,layout-inflater,oncreateoptionsmenu,Android,Android Fragments,Layout Inflater,Oncreateoptionsmenu,我已经将sethaseoptions菜单(true)放在onCreateView内部,但我仍然无法在片段内部调用oncreateoptions菜单 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true);
sethaseoptions菜单(true)
放在onCreateView
内部,但我仍然无法在片段内部调用oncreateoptions菜单
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
下面是我的onCreateOptions菜单
code
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
我收到的错误消息是:
Fragment类型的方法onCreateOptions菜单(菜单)
必须重写或实现超类型方法
试试这个
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
最后,在onCreateView
方法中,添加此行以使选项显示在工具栏中
setHasOptionsMenu(true);
您已经拥有自动生成的文件res/menu/menu.xml定义操作设置
在MainActivity.java中,可以使用以下方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
// do stuff, like showing settings fragment
return true;
}
return super.onOptionsItemSelected(item); // important line
}
在片段调用的onCreateView()
方法中:
setHasOptionsMenu(true);
并添加以下两种方法:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_1:
// do stuff
return true;
case R.id.action_2:
// do more stuff
return true;
}
return false;
}
最后,添加新文件res/menu/fragment\u menu.xml定义action\u 1和action\u 2
这样,当应用程序显示片段时,其菜单将包含3个条目:
- 操作1来自res/menu/fragment\u menu.xml
- 操作2来自res/menu/fragment\u menu.xml
- 操作设置来自res/menu/menu.xml
我尝试了@Alexander Farber和@Sino Raj的答案。两个答案都很好,但我无法在片段中使用OnCreateOptions菜单,直到我发现缺少了什么:
在“我的活动”中添加setSupportActionBar(工具栏),如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
我希望这个答案能对有同样问题的人有所帮助。打电话
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_add_customer, container, false);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
里面
onViewCreated(...)
碎片
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
((MainActivity)getActivity()).setSupportActionBar(toolbar);
setHasOptionsMenu(true);
}
如果应用程序有一个带有Actionbar的主题,例如theme.MaterialComponents.DayNight.DarkActionBar
或Activity
有自己的工具栏,则Set-setHasMenuOptions(true)可以工作,否则片段中的OnCreateOptions菜单
不会被调用
如果要使用独立的工具栏
,则需要获取“活动”并将工具栏
设置为支持操作栏
(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)
它允许调用您的片段onCreateOptions菜单
另一种选择是,您可以使用工具栏对工具栏的菜单进行充气。充气菜单(R.menu.your_菜单)
,并使用
toolbar.setOnMenuItemClickListener {
// do something
true
}
如果不添加以下行,则不会调用它:SethasOptions菜单(true)片段的code>onCreateOptionsMenu()的参数与活动的参数不同。此外,与上述ans中提到的活动中onCreateOptionsMenu()的布尔值不同,返回类型也是void。有趣的注意:如果在包含活动中也重写了onCreateOptionsMenu,将显示两个选项菜单项。sethaspoptions菜单(true)必须在onCreate()
中调用code>才能完成。感谢“设置选项菜单(true);”,我在找,问题在碎片里,不是activity@OlivierM答案确实解释了片段菜单。我很欣赏对它如何与活动菜单交互的解释。
toolbar.setOnMenuItemClickListener {
// do something
true
}