在 Kotlin 中无法“findViewById”。收到错误“类型推断失败”

新手上路,请多包涵

当我尝试通过 id 查找 RecycleView 时出现以下错误。

错误:- 类型推断失败:没有足够的信息来推断参数 T

错误

代码:

 class FirstRecycleViewExample : AppCompatActivity() {
    val data = arrayListOf<String>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.first_recycleview)

        val recycler_view =  findViewById(R.id.recycler_view) as RecyclerView ///IN THIS LINE I AM GETTING THE ERROR

        data.add("First Data")
        data.add("Second Data")
        data.add("Third Data")
        data.add("Forth Data")
        data.add("Fifth Data")

        //creating our adapter
        val adapter = CustomRecycleAdapter(data)

        //now adding the adapter to recyclerview
        recycler_view.adapter = adapter
    }
}

原文由 Ravindra Kushwaha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
2 个回答

尝试类似:

 val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)

您也可以使用 Kotlin Android Extensions 。在 此处 查看文档。

有了它,您可以直接在代码中调用 recycler_view

Kotlin Android 扩展:

  • 在您的应用程序 gradle.build 添加 apply plugin: 'kotlin-android-extensions'
  • 在您的课程中为 import kotlinx.android.synthetic.main.<layout>.* 添加导入,其中 <layout> 是您的布局的文件名。
  • 就是这样,你可以直接在你的代码中调用 recycler_view

它是如何工作的?第一次调用 recycler_view ,调用 findViewById 完成并 _缓存_。

原文由 Kevin Robatel 发布,翻译遵循 CC BY-SA 3.0 许可协议

无法访问像 OP 这样的 ui 组件,在应用程序 gradle 中需要如下所示:

 plugins {
    ...
    id 'kotlin-android-extensions'
}

即使在添加此行之后,android studio 仍然无法自动解析 kotlin 合成的导入,因此您可能需要使缓存无效并重新启动。

如果仍然无法正常工作,则根据视图手动导入

  • 活动/片段视图:导入 kotlinx.android.synthetic.main..*
  • 普通视图:import kotlinx.android.synthetic.main..view.*

更新 - 2

如果您收到此信息警告 -

警告:’kotlin-android-extensions’ Gradle 插件已弃用。

插件“kotlin-android-extensions”将被弃用。因此,在您的应用程序 gradle 中添加以下内容

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

原文由 MDT 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题