代码之家  ›  专栏  ›  技术社区  ›  HelloCW

如何删除Kotlin中ClipboardManager的OnPrimaryClipChangedListener?

  •  1
  • HelloCW  · 技术社区  · 6 年前

    我使用下面的代码来监视剪贴板的更改,我希望在完成操作后移除监视器。

    但是 clipboard.removePrimaryClipChangedListener { } 需要传递参数,我该怎么做?

    代码

     btnMonitor.setOnClickListener {
             val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    
             clipboard.addPrimaryClipChangedListener {
                 if (clipboard.hasPrimaryClip() && clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN) ) {
                     var pasteData: String = ""
                     val item = clipboard.primaryClip.getItemAt(0)
                     pasteData = item.text.toString()
    
                     toast("Hi - " + pasteData)
                 }
             }  
    
             clipboard.removePrimaryClipChangedListener {  }  //I don't know how to pass paramaters        
         }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Onik    6 年前

    为了 remove OnPrimaryClipChangedListener 你需要一个你之前“设置”的lambda的引用。请尝试按以下方式重新组织代码。

    private val lambda = ClipboardManager.OnPrimaryClipChangedListener {
    
        if (clipboard.hasPrimaryClip() && clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN) ) {
            var pasteData: String = ""
            val item = clipboard.primaryClip.getItemAt(0)
            pasteData = item.text.toString()
    
            toast("Hi - " + pasteData)
        }
    }
    

    稍后,您可以添加和删除lambda clipboard.addPrimaryClipChangedListener(lambda) clipboard.removePrimaryClipChangedListener(lambda)