无法在片段和导航栏

时间:2017-08-30 05:58:44

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

我遇到了隐藏和添加片段和导航抽屉中的菜单项的问题,因为我在我的应用程序中我已注销并添加联系人菜单,我想要设置注销选项,但不需要添加所有屏幕中的联系人按钮。由于我的应用程序包含四个视图分页器标签片段和导航抽屉。我已经通过菜单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时,我的添加联系人菜单也会被禁用但是我想只在Fragment A中,和我打开导航抽屉时的情况相同

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

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)

menu!!.removeItem(R.id.iadd_contact)
}

和oncreateview:

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也被删除了。

1 个答案:

答案 0 :(得分:0)

首先覆盖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)
    }