没有调用onCreateOptionsMenu。

问题描述 投票:0回答:2

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)
}
java android android-studio kotlin optionmenu
2个回答
1
投票

调用 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);

0
投票
 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)
    }
   }

0
投票

为了使 onCreateOptionsMenu 在你的片段中工作,你可以按照以下步骤进行。

确保将你的工具栏设置为ActionBar(如果使用的话)。

style.xml

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    ...
</style>

在您的活动的 onCreate:

setSupportActionBar(my_toolbar)

没有这条线。onOptionsItemSelected 事件不会在你的片段中运行。这将所有的ActionBar回调分配给Toolbar。

在你的片段中 onViewCreatedonCreateView :

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)
© www.soinside.com 2019 - 2024. All rights reserved.