Android Groupie RecyclerView单击特定项目

Android Groupie RecyclerView单击特定项目,android,kotlin,android-recyclerview,onclick,Android,Kotlin,Android Recyclerview,Onclick,有人能告诉我如何使用Groupie和Kotlin点击RecyclerView中的特定项目吗? 现在,我想显示单击其中一个按钮后单击的用户的用户名。 我尝试过这种方式,但logcat中没有显示任何内容: package com.example.boxes.screens.addfriends import android.util.Log import android.view.View import com.example.boxes.R import com.squareup.picasso

有人能告诉我如何使用Groupie和Kotlin点击RecyclerView中的特定项目吗? 现在,我想显示单击其中一个按钮后单击的用户的用户名。 我尝试过这种方式,但logcat中没有显示任何内容:

package com.example.boxes.screens.addfriends

import android.util.Log
import android.view.View
import com.example.boxes.R
import com.squareup.picasso.Picasso
import com.xwray.groupie.Item
import com.xwray.groupie.ViewHolder
import kotlinx.android.synthetic.main.invitation_row_invite.view.*

class InvitationItem (val invitation: Invitation): Item<ViewHolder>() {
    override fun bind(viewHolder: ViewHolder, position: Int) {
        viewHolder.itemView.textview_friend_username.text = invitation.username

        viewHolder.itemView.invite_discard_button.setOnClickListener{ View.OnClickListener {
            Log.d("InvitationItem", it.textview_friend_username.toString())
        }}

        Picasso.get().load(invitation.userImageUrl).into(viewHolder.itemView.image_friend_avatar)
    }

    override fun getLayout(): Int {
        return R.layout.invitation_row_invite
    }

}
package com.example.box.screens.addfriends
导入android.util.Log
导入android.view.view
导入com.example.box.R
导入com.squareup.picasso.picasso
导入com.xwray.groupie.Item
导入com.xwray.groupie.ViewHolder
导入kotlinx.android.synthetic.main.invitation\u row\u invitate.view*
班级邀请函(val邀请函:邀请函):项目(){
覆盖趣味绑定(视图持有者:视图持有者,位置:Int){
viewHolder.itemView.textview\u friend\u username.text=邀请.username
viewHolder.itemView.invite\u discard\u button.setOnClickListener{View.OnClickListener{
Log.d(“InvitationItem”,it.textview\u friend\u username.toString())
}}
Picasso.get().load(invitation.userImageUrl).into(viewHolder.itemView.image\u friend\u avatar)
}
重写getLayout():Int{
返回R.layout.invitation\u row\u invitage
}
}
这就是

直接写

viewHolder.itemView.invite_discard_button.setOnClickListener {
   Log.d("InvitationItem", invitation.username)
}

没有
View.OnClickListener{}
。在您的例子中,您只需创建
View.OnClickListener
对象,如果用户单击按钮

,则我会出现“java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.widget.TextView.toString()'on a null object reference”错误。哦,我发现了代码中的错误并编辑了我的答案。问题就在这里。textview\u friend\u username.toString()。在本例中,它指的是ButtonView。我们可以通过简单的log invitation.username来解决这个问题,它等于textview\u friend\u username.textThank you。也许你也知道我如何让这个OnClickListener在ViewModel中启动一些函数(一些Firebase的东西)?怎么处理?当然。通常我会像这样将lambda传递给项构造函数
类InvitationItem(val invitation:invitation,val onInvitationClick:(invitation)->Unit)
之后,可以在onBind方法
viewHolder.itemView.invitage\u discard\u button.setOnClickListener{onInvitationClick(invitation)//Invoke lambda}
您可以在创建项目时设置ViewModel函数:
val item=InvitationItem(邀请,{invent:invitation->ViewModel.onInvitationClick(inv)})
谢谢,您帮了我很多忙!