首页 > 解决方案 > Kotlin - 具有两个功能的接口,其中一个功能不起作用

问题描述

我有一个具有一个功能的界面,它工作正常。然后我添加了第二个函数,我想用它来发送相同的数组但发送到不同的活动,但在主要活动中我收到以下错误:没有为参数“PatDischargeBtnDelegate”传递值。这是我的代码:

界面

interface PatDataCommentDelegate {
    fun patDataCommentBtnClicked(ptdata: PatData)
    fun dischargePatientBtnClicked(ptdata: PatData)
}

适配器

class PatDataAdapter(val ptdata: ArrayList<PatData>, val patDataBtnDelegate: PatDataCommentDelegate,
                     val patDischargeBtnDelegate: PatDataCommentDelegate) : 
RecyclerView.Adapter<PatDataAdapter.ViewHolder>() { 
......


       commentImage?.setOnClickListener {
            patDataBtnDelegate.patDataCommentBtnClicked(ptdata)
        }

        dischargePatImg?.setOnClickListener{
            patDischargeBtnDelegate.dischargePatientBtnClicked(ptdata)
        }

主要活动

class PatDataActivity : AppCompatActivity(), PatDataCommentDelegate {
....

patDataFromAdapter = PatDataAdapter(ptdatas, this) //I get the error here


 override fun patDataCommentBtnClicked(ptdata: PatData) {
        val commentDataActivity = Intent(this, CommentsActivity::class.java)
        commentDataActivity.putExtra(DOCUMENT_ID, ptdata.documentId)
        commentDataActivity.putExtra(USER_ID, userId)
        commentDataActivity.putExtra(PTNAME, ptdata.ptName)
        commentDataActivity.putExtra(FIN, ptdata.fin)
        commentDataActivity.putExtra(ROOM, ptdata.room)
        commentDataActivity.putExtra(HOSP, ptdata.hosp)
        startActivity(commentDataActivity)
    }

    override fun dischargePatientBtnClicked(ptdata: PatData) {
        val dischargePatientActivity = Intent(this, DischargeActivity::class.java)
        dischargePatientActivity.putExtra(DOCUMENT_ID, ptdata.documentId)
        dischargePatientActivity.putExtra(USER_ID, userId)
        dischargePatientActivity.putExtra(PTNAME, ptdata.ptName)
        dischargePatientActivity.putExtra(FIN, ptdata.fin)
        dischargePatientActivity.putExtra(ROOM, ptdata.room)
        dischargePatientActivity.putExtra(HOSP, ptdata.hosp)
        startActivity(dischargePatientActivity)
    }

我不确定我错过了什么,非常感谢任何帮助。谢谢!

标签: kotlinandroid-activityandroid-arrayadapter

解决方案


问题出在第三个论点中。

class PatDataAdapter(
    val ptdata: ArrayList<PatData>, 
    val patDataBtnDelegate: PatDataCommentDelegate,
    val patDischargeBtnDelegate: PatDataCommentDelegate // you don't need this one.
) : RecyclerView.Adapter<PatDataAdapter.ViewHolder>() { 

这应该有效:

class PatDataAdapter(val ptdata: ArrayList<PatData>, val patDataBtnDelegate: PatDataCommentDelegate) : 
RecyclerView.Adapter<PatDataAdapter.ViewHolder>() { 


   commentImage?.setOnClickListener {
        patDataBtnDelegate.patDataCommentBtnClicked(ptdata)
    }

    dischargePatImg?.setOnClickListener{
        patDataBtnDelegate.dischargePatientBtnClicked(ptdata)
    }

您只需要对接口PatDataCommentDelegate本身的引用,而不是分别对每个方法的引用。


推荐阅读