Android OnOptions ItemSelected在片段中不工作

Android OnOptions ItemSelected在片段中不工作,android,android-fragments,kotlin,android-toolbar,Android,Android Fragments,Kotlin,Android Toolbar,我正试图在我的一个ViewPager框架中设置一个菜单。单击其中一个选项时,不会执行操作,仅关闭菜单。我在StackOverFlow上寻找其他问题,但这些问题对我帮助不大。 如何修复此错误 class CFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setHasOptionsMe

我正试图在我的一个ViewPager框架中设置一个菜单。单击其中一个选项时,不会执行操作,仅关闭菜单。我在StackOverFlow上寻找其他问题,但这些问题对我帮助不大。 如何修复此错误

class CFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_c, container, false)
        val toolbar = view.findViewById(R.id.toolbarCFragement) as Toolbar
        toolbar.inflateMenu(R.menu.menu_c)


        //...

return view
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.menu_c, menu)
        super.onCreateOptionsMenu(menu, inflater)
    }


    override fun onOptionsItemSelected(item: MenuItem): Boolean {

        if (item.itemId == R.id.optionOne) {
            Toast.makeText(requireActivity(), "One", Toast.LENGTH_SHORT).show()
            return true
        } else if (item.itemId == R.id.optionTwo) {
            startActivity(Intent(requireActivity(), Members::class.java))
            return true
        } else if (item.itemId == R.id.optionThree) {
            Toast.makeText(requireActivity(), "Three", Toast.LENGTH_SHORT).show()
            return true
        }else{
            return super.onOptionsItemSelected(item)
        }
    }
}
菜单:


我不知道你的应用主题或布局文件,但问题可能是你膨胀了工具栏:

val toolbar = view.findViewById(R.id.toolbarCFragement) as Toolbar
toolbar.inflateMenu(R.menu.menu_c)
此外,在代码中,您可以执行以下操作:

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
  inflater.inflate(R.menu.menu_c, menu)
  super.onCreateOptionsMenu(menu, inflater)
}
这也会使你的菜单膨胀。 而override fun OnOptions ItemSelectedItem:MenuItem:Boolean仅适用于第二个菜单,该菜单可能位于膨胀的工具栏下。 您没有在工具栏上设置onMenuItemClickListener

因此,如果要使用在onCreateView中充气的工具栏,必须实现:

toolbar.setOnMenuItemClickListener { /*TODO*/ }

我不知道你的应用主题或布局文件,但问题可能是你膨胀了工具栏:

val toolbar = view.findViewById(R.id.toolbarCFragement) as Toolbar
toolbar.inflateMenu(R.menu.menu_c)
此外,在代码中,您可以执行以下操作:

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
  inflater.inflate(R.menu.menu_c, menu)
  super.onCreateOptionsMenu(menu, inflater)
}
这也会使你的菜单膨胀。 而override fun OnOptions ItemSelectedItem:MenuItem:Boolean仅适用于第二个菜单,该菜单可能位于膨胀的工具栏下。 您没有在工具栏上设置onMenuItemClickListener

因此,如果要使用在onCreateView中充气的工具栏,必须实现:

toolbar.setOnMenuItemClickListener { /*TODO*/ }

当您试图在工具栏布局中膨胀菜单项时,请执行此操作

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_c, container, false)
        val toolbar = view.findViewById(R.id.toolbarCFragement) as Toolbar
        toolbar.inflateMenu(R.menu.menu_c)
        toolbar.setOnMenuItemClickListener { item ->
            when (item.itemId) {
                R.id.optionOne -> {
                                       Toast.makeText(requireActivity(), "One", 
                                       Toast.LENGTH_SHORT).show()
                                       }
                R.id.optionTwo -> {
                                       startActivity(Intent(requireActivity(), 
                                       Members::class.java))
                                       }
              // your reset case
            }
            true
        }
      return view
    }
不需要重写

onCreateOptionsMenu

当您试图在工具栏布局中膨胀菜单项时,请执行此操作

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_c, container, false)
        val toolbar = view.findViewById(R.id.toolbarCFragement) as Toolbar
        toolbar.inflateMenu(R.menu.menu_c)
        toolbar.setOnMenuItemClickListener { item ->
            when (item.itemId) {
                R.id.optionOne -> {
                                       Toast.makeText(requireActivity(), "One", 
                                       Toast.LENGTH_SHORT).show()
                                       }
                R.id.optionTwo -> {
                                       startActivity(Intent(requireActivity(), 
                                       Members::class.java))
                                       }
              // your reset case
            }
            true
        }
      return view
    }
不需要重写

onCreateOptionsMenu

一种方法是从片段中删除工具栏,在活动中添加工具栏,并在活动中调用方法setSupportActionBartoolbar。一种方法是从片段中删除工具栏,在活动中添加工具栏,并在活动中调用方法setSupportActionBartoolbar