gpt4 book ai didi

android - 无法在使用 Kotlin 的方法调用中为接口(interface)传递 lambda(就像 setOnClickListener 的做法一样)

转载 作者:行者123 更新时间:2023-12-05 00:10:58 26 4
gpt4 key购买 nike

我创建了类:

class SomeClass {
var listener: SomeListener? = null

interface SomeListener {
fun onClick(v: View?)
}

fun addSomeListener(l: SomeListener){
listener = l
}

}

我这样调用它,效果很好:

SomeClass().addSomeListener(object : SomeClass.SomeListener {
override fun onClick(v: View?) {
// Do something
}
})

但是,以下语法在 Android Studio 中失败::

  SomeClass().addSomeListener{ view ->
// Do something
}

Type mismatch. Required: SomeClass.SomeListener Found:() → Unit


这个我不明白,因为Android的setOnClickListener方法也是这样实现的:

/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}

和...

/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}

这显然可以称为:

someView.setOnClickListener { view ->
// Do something
}

我错过了什么?

最佳答案

它正在调用 SAM Conversions。如果你想让它工作,你需要为你的界面添加关键字fun,这样它看起来像这样:

fun interface SomeListener {
fun onClick(v: View?)
}

您可以通过阅读此 accepted answer 了解更多信息.

关于android - 无法在使用 Kotlin 的方法调用中为接口(interface)传递 lambda(就像 setOnClickListener 的做法一样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65458682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com