android - Kotlin 多层 IT 引用

标签 android lambda kotlin

如何在不创建新的 val/var 的情况下从第三层引用第二层“it”?我知道您可以执行 val mydata = it 然后执行 mydata.id.toString() 我只是想知道 Kotlin 中是否有一些东西可以让我从更高级别引用它?

data.arrayresults.forEach {
    val result = it

    result.myData.let {
        val itemView - inflater.inflate(R.layout.somelayout)

        itemView.setOnClickListener(View.OnClickListener {

            // the it references the view but I want it to reference the result.myData
            SomeActivity.startActivity(context, it.id.toString())
        })
    }
}

最佳答案

不,it 符号总是引用最内层的隐式单个 lambda 参数。

要解决此问题并提高代码的可读性,请使用 named lambda parameters每次嵌套带有参数的 lambda 时,如 Coding conventions 中所建议的那样:

data.arrayresults.forEach { result ->    
    result.myData.let { myData ->
        val itemView - inflater.inflate(R.layout.somelayout)

        itemView.setOnClickListener(View.OnClickListener { view ->

            // the it references the view but I want it to reference the result.myData
            SomeActivity.startActivity(context, myData.id.toString())
        })
    }
}

关于android - Kotlin 多层 IT 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873589/

相关文章:

安卓工作室 3.1 : Erroneous unresolved references in editor

java - 在 build.properties 中找不到 key.store 和 key.alias 属性

java - 为什么 HTTPURLConnection.getInputStream() 需要时间

c++11 - C++ 将 lambda 传递给模板参数

c# - LINQ 身份函数

android - 如果 LiveData 没有属性支持,livedata-ktx 与 ViewModel 的使用是否会导致内存泄漏?

android - 如何将协程范围限定为 fragment ,以便在 fragment 离开屏幕或被销毁时自动取消?

android - React Native Android TV 控件

c# - 具有可变数量参数的匿名方法

android - 如何根据 Kotlin 中的进度条进度更新 textview 值