【问题标题】:Type mismatch error on custom interface call [duplicate]自定义接口调用上的类型不匹配错误[重复]
【发布时间】:2019-10-13 17:48:06
【问题描述】:

我正在重新设计一个我一直在使用 Kotlin 开发的应用程序,以适应这种语言。在我的 RecyclerView 适配器中,我为长点击创建了一个自定义的OnLongClickListener 界面:

interface OnItemLongClickListener{
    fun onItemLongClick(entry: Entry)
}

fun setOnItemLongClickListener(listener: OnItemLongClickListener){
    this.listener = listener
}

在我的MainActivity.ktonCreate() 中,我在我的适配器对象上调用setOnItemLongClickListener 以传递一些额外的意图:

    adapter!!.setOnItemLongClickListener { entry ->
        val intent = Intent(this@MainActivity, AddEditEntryActivity::class.java)

        intent.putExtra(AddEditEntryActivity.EXTRA_ID, entry.id)
        intent.putExtra(AddEditEntryActivity.EXTRA_USERNAME, entry.username)
        intent.putExtra(AddEditEntryActivity.EXTRA_HINT, entry.hint)
        intent.putExtra(AddEditEntryActivity.EXTRA_PASSWORD, entry.password)
        startActivityForResult(intent, EDIT_ENTRY_REQUEST)
    }

但是整个东西有一个红色下划线并抛出一个Type Mismatch 错误。

我可以为每个请求提供更多代码。我只是暂时保持简短以避免不必要的混乱。

【问题讨论】:

  • 它已经拥有自己的OnItemLongClickListener。将您的类重命名为例如MyItemLongClickListener,并且设置它的方法也不要混淆编译器
  • @VladyslavMatviienko 没有区别。

标签: android kotlin interface android-recyclerview


【解决方案1】:

请务必包含完整的错误消息。没有它,我只能猜测这个问题与您提供 lambda 有关,而 OnItemLongClickListener 的对象是预期的。您可以像这样更改代码:

adapter!!.setOnItemLongClickListener (object: OnItemLongClickListener {
    override fun onItemLongClick(entry: Entry){
        //code goes here
    }
})

您尝试执行的操作仅适用于 Java 接口,称为 SAM conversion

【讨论】:

  • 当然。我添加了错误屏幕。检查编辑:)
  • 是的,正如我所料。我的建议应该会有所帮助
  • @谢谢。我已接受并赞成您的回答。如果您认为这是一个很好的问题,您也可以投票给我吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2021-08-13
  • 2017-04-14
  • 2015-04-28
相关资源
最近更新 更多