无法从片段和导航抽屉中添加和删除菜单选项



我遇到了在片段和导航抽屉中隐藏和添加菜单项的问题,因为我在应用程序中有注销和添加联系人菜单,我想在所有屏幕中设置注销选项,但不需要在所有屏幕上添加联系人按钮。由于我的应用程序包含四视图寻呼机选项卡片段和导航抽屉。我已经通过菜单XML文件添加了我的菜单。我希望我的注销选项在导航抽屉中的所有片段中,但只在我的第一个选项卡片段中添加联系人。

这是主要活动的代码:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
val menuInflater = menuInflater.inflate(R.menu.main, menu)
val menuLogout = menu.findItem(R.id.logout)
val menuadd = menu.findItem(R.id.iadd_contact)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: android.view.MenuItem): Boolean {
when (item.itemId) {
R.id.logout -> {
postLogout(path, params) { response ->
}
}

return true
R.id.iadd_contact -> {
val intent = Intent(Intent.ACTION_INSERT)
intent.setType(ContactsContract.Contacts.CONTENT_TYPE)
startActivity(intent)
return true
}
}
return super.onOptionsItemSelected(item)
}

当我从片段A移动到片段B时,我只想启用注销按钮并禁用添加联系人,然后当我再次从片段B返回到片段A时,我的添加联系人菜单也被禁用,但我只想在片段A中,与打开导航抽屉时相同

在片段中,我设置了这样的代码:

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
menu!!.removeItem(R.id.iadd_contact)
}

并创建视图:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// TODO Auto-generated method stub
setHasOptionsMenu(false)
rootv = inflater!!.inflate(R.layout.edit_profile, container, false)
activity.invalidateOptionsMenu()
return rootv
}

简单地说,我只想在我的第一个选项卡片段中启用我的R.id.iadd_contact,在所有其他片段中禁用,所以由于片段向后堆栈或再次从另一个片段移动到我的第一次选项卡片段,我添加的R.id.iadd_contact也被删除。

第一次覆盖Create Method

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

然后在你的碎片中膨胀菜单

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
menu!!.clear()
inflater!!.inflate(R.menu.main, menu)
}

最新更新