如何禁用 Kotlin 中的某些 PopupMenu 项目?

Hel*_*oCW 1 android kotlin

我使用以下代码 B 单击按钮来打开 PopupMenu.

包括PopupMenu编辑、删除和设置项。

我希望编辑和删除项在没有记录时被禁用或消失,也许就像代码A,我该如何编写代码?

代码A

popup.setOnMenuItemBeforePopup {
  if (recordCount==0){
    R.id.popMenuMoreEdit.disable
    R.id.popMenuMoreDelete.disbale
  }
}
Run Code Online (Sandbox Code Playgroud)

代码B

    private fun setControls(){       
        btnMore.setOnClickListener (View.OnClickListener { v -> showPopup(v, mContext) })
    }

    fun showPopup(v: View, mContext: Context) {
        val popup = PopupMenu(mContext, v)
        popup.inflate(R.menu.menu_more)

        popup.setOnMenuItemClickListener {
            item -> handleMenu(item, mContext)
        }

        popup.show()
    }


   private fun handleMenu(item: MenuItem, mContext: Context): Boolean {
        when (item.itemId) {

            R.id.popMenuMoreEdit -> {

                return true
            }

            R.id.popMenuMoreDelete -> {

                return true
            }

            R.id.popMenuMoreBackupSetting-> {

                return true
            }

        }
        return false
    }
Run Code Online (Sandbox Code Playgroud)

ear*_*jim 5

您只需获取MenuItem您的实例PopupMenu并在适当的时候将它们设置为启用/禁用即可。

例如(假设您的PopupMenu实例名为popup):

popup.inflate(R.menu.menu_more)

// ...

if (recordCount == 0){
    // assuming popMenuMoreEdit and popMenuMoreDelete are item IDs in menu_more
    popup.menu.findItem(R.id.popMenuMoreEdit).isEnabled = false
    popup.menu.findItem(R.id.popMenuMoreDelete).isEnabled = false
}
Run Code Online (Sandbox Code Playgroud)