【问题标题】:Unable to add and remove menu option from fragment and navigation drawer无法从片段和导航抽屉中添加和删除菜单选项
【发布时间】:2017-08-30 05:58:43
【问题描述】:

在我的应用程序中,我遇到了在片段和导航抽屉中隐藏和添加菜单项的问题在所有屏幕中。因为我的应用程序包含四个视图寻呼机选项卡片段和导航抽屉。我已经通过菜单 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 也被删除。

【问题讨论】:

    标签: android android-fragments navigation kotlin navigation-drawer


    【解决方案1】:

    首先覆盖 onCreate 方法

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

    【讨论】:

    • 从 MainActivity 中移除 onCreateOptionsMenu 并添加到 Fragment.. 创建单独的菜单文件
    • 这适用于简单的 viewpager 选项卡片段。我在片段中创建了单独的 onCreateOptionsmenu。但是现在我遇到了导航抽屉片段文件的问题。当我从导航抽屉片段文件回到我的标签片段时,可见性也消失了。我也如何处理导航抽屉片段文件。
    • 尝试使用单独的 onCreateOptionsmenu 导航片段
    • 我也为抽屉式导航创建了单独的菜单,但它不起作用
    • 你在导航片段中添加了onCreate吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多