onCreateOptionsMenu在一个片段中没有被调用。我必须手动调用 setHasOptionsMenu(true)
在 onCreatedView()
但这导致 item.itemId
是一个空字符串 ""
在 onOptionsItemSelected()
因此我无法检测到哪个菜单项被点击。
我目前在一个片段中使用这个功能,但在一个片段中,onCreateOptionsMenu不会被调用。
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_font_share, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_font_size_Btn -> {
}
R.id.menu_share_Btn -> {
super.showShareSheet()
}
}
return super.onOptionsItemSelected(item)
}
调用 super.onCreateOptionsMenu(menu,inflater)
打气
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_font_share, menu)
super.onCreateOptionsMenu(menu,inflater)
}
这可能会更有帮助参考文献:。https:/stackoverflow.coma1565403911393354
试试这个
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
而在 onCreate
添加这行以使选项出现在你的 Toolbar
setHasOptionsMenu(true);
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle item selection
return when (item.getItemId()) {
R.id. menu_font_size_Btn -> {
//your TODO
true
}
else -> super.onOptionsItemSelected(item)
}
}
为了使 onCreateOptionsMenu
在你的片段中工作,你可以按照以下步骤进行。
确保将你的工具栏设置为ActionBar(如果使用的话)。
style.xml
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
...
</style>
在您的活动的 onCreate
:
setSupportActionBar(my_toolbar)
没有这条线。onOptionsItemSelected
事件不会在你的片段中运行。这将所有的ActionBar回调分配给Toolbar。
在你的片段中 onViewCreated
或 onCreateView
:
setHasOptionsMenu(true)
并且也覆盖这个方法。
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.id) {
R.id.item_01 -> {}
R.id.item_02 -> {}
...
}
super.onCreateOptionsMenu(menu, inflater)
}
如果你使用的是Android导航组件,请在你的活动中添加这个。
setupActionBarWithNavController(navController)