【问题标题】:onCreateOptionsMenu not being calledonCreateOptionsMenu 没有被调用
【发布时间】:2020-09-10 04:25:18
【问题描述】:

onCreateOptionsMenu 不会在片段中被调用。我必须在onCreatedView() 中手动调用setHasOptionsMenu(true),但这会导致item.itemIdonOptionsItemSelected() 中为空字符串"",因此我无法检测到哪个菜单项被点击了。

我目前在片段中使用它:

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)
}

【问题讨论】:

  • @DhavalShah 没有。我已经试过了。再次阅读问题
  • 你必须设置actionBar:setHasOptionsMenu(true); ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

标签: java android android-studio kotlin optionmenu


【解决方案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.com/a/15654039/11393354

试试这个,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

onCreate 中添加这一行以使选项出现在您的Toolbar

setHasOptionsMenu(true);

【讨论】:

    【解决方案2】:

    要使onCreateOptionsMenu 在您的片段中工作,您可以按照以下步骤操作:

    请务必将您的 Toolbar 设置为 ActionBar(如果使用的话):

    styles.xml

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

    在你的 Activity 的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 导航组件,请在 Activity 中添加:

    setupActionBarWithNavController(navController)
    

    【讨论】:

      【解决方案3】:

      Fragment-owned app bar:如果您在 Fragment 布局中定义了 Toolbar 而在父 Activity 的布局中没有,您应该使用工具栏 API 来扩展菜单。 (片段菜单 API 仅适用于 Activity 拥有的应用栏)

      片段布局

      <androidx.appcompat.widget.Toolbar
          android:id="@+id/toolbar"
          ... />
      

      片段

      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
      
          ...
          val toolbar = binding.toolbar
          toolbar.inflateMenu(R.menu.sample_menu)
          toolbar.setOnMenuItemClickListener {
                  when (it.itemId) {
                      R.id.action_settings -> {
                          // Navigate to settings screen
                          true
                      }
                      R.id.action_done -> {
                          // Save profile changes
                          true
                      }
                      else -> false
                  }
              }
      
          //set item visibility
          toolbar.menu.findItem(R.id.action_done).isVisible = ...
          ...
      }
      

      【讨论】:

        【解决方案4】:
         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(menu: Menu?): Boolean 不存在。
        猜你喜欢
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多