Как удалить OnPrimaryClipChangedListener из ClipboardManager в Kotlin?

Я использую следующий код для отслеживания изменений в буфере обмена. Я надеюсь удалить монитор после завершения операции.

Но 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 ответ

Решение

Чтобы удалить OnPrimaryClipChangedListener, вам нужна ссылка на лямбду, которую вы "установили" ранее. Попробуйте реорганизовать код следующим образом.

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

Позже вы можете добавить и удалить лямбда с clipboard.addPrimaryClipChangedListener(lambda) а также clipboard.removePrimaryClipChangedListener(lambda)

Другие вопросы по тегам