如何使用 kotlin 在 fragment 中添加选项菜单
class HomeFragment : Fragment() {
companion object {
lateinit var drawerLayout:DrawerLayout
lateinit var toolbar: android.support.v7.widget.Toolbar
private lateinit var toggle: ActionBarDrawerToggle
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val v = inflater.inflate(R.layout.fragment_home, container, false)
setHasOptionsMenu(true)
toolbar = v.findViewById(R.id.toolBar) as Toolbar
toolbar.inflateMenu(R.menu.menuhome)
drawerLayout = v.findViewById(R.id.drawer_Layout)
// Creating toggle
toggle = ActionBarDrawerToggle(activity, drawerLayout, toolbar,R.string.navigaionopen,R.string.drawerClosed)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
return v
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when(item!!.itemId){
R.id.search -> {Toast.makeText(context,"Search",Toast.LENGTH_SHORT).show()}
R.id.send -> {Toast.makeText(context,"Send selected",Toast.LENGTH_SHORT).show()}
}
return super.onOptionsItemSelected(item)
}
我已经添加,但是当我点击三个点或 ifroom 图标应用程序会崩溃。
覆盖创建选项菜单不适用于我的应用
最佳答案
为了有一个选项菜单,您需要在 onCreate 中告诉您的 fragment ,然后覆盖 onCreateOptionsMenu。
然后处理对项目的任何点击覆盖 onOptionsItemSelected()
您的完整 Activity 应如下所示:
class TestFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_test, menu);
super.onCreateOptionsMenu(menu, inflater)
}
您也可以尝试使用 android 提供的 actionBar 小部件,以防 appcompat 不适合您
关于android - 如何在 fragment 中创建选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344714/