Android 在使用kotlin的非活动类中使用Toast.MakeToos时出错

Android 在使用kotlin的非活动类中使用Toast.MakeToos时出错,android,android-studio,kotlin,android-toast,Android,Android Studio,Kotlin,Android Toast,我正在使用Kotlin在android中构建一个聊天应用程序。我想长按一条信息,将其复制到剪贴板上。此函数工作正常,但由于某些错误,我无法显示祝酒词。这是我的密码 class ChatFromItem(val text: String, val user: User): Item<ViewHolder>() { override fun bind(viewHolder: ViewHolder, position: Int) { viewHolder.itemView.text

我正在使用Kotlin在android中构建一个聊天应用程序。我想长按一条信息,将其复制到剪贴板上。此函数工作正常,但由于某些错误,我无法显示祝酒词。这是我的密码

class ChatFromItem(val text: String, val user: User): Item<ViewHolder>() {
override fun bind(viewHolder: ViewHolder, position: Int) {
    viewHolder.itemView.textView_from_row.text = text
    viewHolder.itemView.textView_from_row.setOnLongClickListener {
        Toast.makeText(this, "Message copied", Toast.LENGTH_LONG).show()
        val clipboard = it.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
        val myClip = ClipData.newPlainText("label", text)
        clipboard.primaryClip = myClip
        true
    }

    val uri = user.profileImageUrl
    val target = viewHolder.itemView.imageView_chat_from_row
    Picasso.get().load(uri).into(target)
}

override fun getLayout(): Int {
    return R.layout.chat_from_row
}
类ChatFromItem(val text:String,val user:user):Item(){
覆盖趣味绑定(视图持有者:视图持有者,位置:Int){
viewHolder.itemView.textView\u from\u row.text=文本
viewHolder.itemView.textView_from_row.setOnLongClickListener{
Toast.makeText(此“消息已复制”,Toast.LENGTH\u LONG.show())
val clipboard=it.context.getSystemService(context.clipboard\u服务)作为剪贴板管理器
val myClip=ClipData.newPlainText(“标签”,文本)
clipboard.primaryClip=myClip
真的
}
val uri=user.profileImageUrl
val target=viewHolder.itemView.imageView\u chat\u from\u行
Picasso.get().load(uri).into(目标)
}
重写getLayout():Int{
从_行返回R.layout.chat_
}
}

有些人可能会感到困惑,为什么在.setOnLongClickListener的最底部会写一个“true”。没有toast语句,代码的其余部分工作正常。我已经测试过很多次了。 我包括一个图像,其中包含android studio向我显示的错误消息


提前感谢。

您需要传递上下文或从视图中获取上下文,如itemView.context。

在kotlin中使用
setOnLongClickListener{/*此处的代码*/}
时,它等同于:

setOnLongClickListener(新的OnLongClickListener(){public boolean onLongClick(视图v){/*您的代码在这里*/}})

因此,当您这样做时:

 viewHolder.itemView.textView_from_row.setOnLongClickListener {
    Toast.makeText(this, "Message copied", Toast.LENGTH_LONG).show()
    ....
 }
这相当于:

setOnLongClickListener(new OnLongClickListener() {
     @Override
     public boolean onLongClick(View v) {

          Toast.makeText(this, "Message copied", Toast.LENGTH_LONG).show()


     }
});
如您所见,上面代码中的
不是
上下文
类型,而是
OnLongClickListener
类型

您可以使用您拥有的视图查找上下文:

 Toast.makeText(viewHolder.itemView.context, "Message copied", Toast.LENGTH_LONG).show()

您可以发布此聊天记录活动的完整代码吗“此函数工作正常,但由于某些错误,我无法显示toast”-IDE向您提供了错误信息,表示您需要将
上下文作为第一个参数传递,
不是
上下文
。请尝试
toast.makeText(viewHolder.itemView.context,“Message copied”,Toast.LENGTH\u LONG)。show()
没问题!我很高兴能为您提供帮助,如果这对您有帮助,请随时将其标记为正确答案。