android - 在 Kotlin 中传递需要参数的函数作为回调

标签 android function kotlin lambda

我正在使用 Kotlin(用于 Android 开发)并且我正在尝试将一个函数传递给另一个我想用作回调的函数。代码非常基础,因为这只是目前的测试。

请注意,尽管您可能想知道为什么我要使用这样的回调,但这只是为了测试目的。在我的实际应用程序中,我想将回调分配给一个值,并在异步方法完成后稍后调用它。

我不能使用协程等...因为此代码将用于多平台解决方案,因此我对进行函数回调很感兴趣。

将接收函数(回调)的我的 Kotlin 类

class SampleApi {
    private var counter: Int = 0

    fun startCounting(initialValue: Int, counterCallBack: (resultVal: Int) -> Unit) {
        counter = initialValue

        counter++

        counterCallBack(counter)
    }
}

上面是一个基本类,它有一个函数startCounting,它将接收一个整数和一个函数。然后它将调用该函数并传入一个值。

调用代码

class MainActivity : AppCompatActivity() {

    private val sampleApi: SampleApi = SampleApi()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        sampleApi.startCounting(5, {counterCallBack()})
    }

    private fun counterCallBack(counter: Int) {
        Toast.makeText(this, counter.toString(), Toast.LENGTH_SHORT).show()
    }
}

上面显示的示例代码包含回调方法(期望接收整数),并包含从期望接收函数的 SampleApi 类调用 startCounting 方法。

我遇到的问题是这一行:

sampleApi.startCounting(5, {counterCallBack()})

Android Studio 中的错误是由于一个值​​是函数需要一个整数,因此我收到错误:

No value passed for parameter 'counter'

我试图查看 lambda,但认为这不是问题所在。我已经搜索过是否已经存在对此的答案,虽然有帮助,但他们似乎没有考虑与我相同的用例。

如有任何帮助,我们将不胜感激。

最佳答案

因为 counterCallback 有你需要的类型,你也可以使用 function reference而不是 lambda:

sampleApi.startCounting(5, ::counterCallBack)

关于android - 在 Kotlin 中传递需要参数的函数作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901680/

相关文章:

javascript - 更改不同移动浏览器的悬停设置?

未成功调用 Javascript 函数

函数声明返回任何东西,也无效?

android - 不使用 wrap_content 时 RecyclerView 在中间启动

operators - 箭头 ("->") 运算符在 Kotlin 中的作用是什么?

android - 调用新 Activity 时无法启动 Activity ComponentInfo : NullPointerException

android - 缺少 android.net.sip

android - Google Play 显示 Android N 预览版错误代码 504

python - 为什么 pygame.event.get() 每帧只能调用一次

android - 如何在 kotlin 中以编程方式更改文本颜色