Android OnOptions ItemSelected在片段中不工作
我正试图在我的一个ViewPager框架中设置一个菜单。单击其中一个选项时,不会执行操作,仅关闭菜单。我在StackOverFlow上寻找其他问题,但这些问题对我帮助不大。 如何修复此错误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
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