当前位置: 首页 > 知识库问答 >
问题:

无法在静态编程语言中“findViewById”。收到错误“类型推断失败”

龚安民
2023-03-14

当我试图按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
    }
}

共有3个答案

汪弘光
2023-03-14

贬低

Kotlin中,我们可以在不使用findViewById语法的情况下获取视图的id。

例如,我们使用下面的布局,从中我们将获得视图的id并执行操作

布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/welcomeMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Hello World!"/>

</FrameLayout>

我们可以使用以下代码找到视图的id

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
 
    welcomeMessage.text = "Hello Kotlin!" ////WE ARE GETTING THE IDS WITHOUT USING THE FINDVIEWBYID syntax
}

怎样

为了能够使用它,您需要一个特殊的导入(我在下面写的那个),但是IDE能够自动导入它。再简单不过了!

import kotlinx.android.synthetic.main.YOUR_LAYOUT_NAME.*/// HERE "YOUR_LAYOUT_NAME" IS YOUR LAYOUT NAME WHICH U HAVE INFLATED IN onCreate()/onCreateView() 

我们需要导入这个属性来获取视图的id,而不需要使用findviewbyd语法。

有关此主题的更多信息,请参阅此链接:-单击此处

更新

现在kotlin android扩展已被弃用,我们现在可以使用视图绑定,而不是使用kotlin提供的绑定,它的工作原理与上述解决方案相同,只需在应用程序gradle中使用以下选项

android {
    ...
    buildFeatures {
        viewBinding true
    }
}
孟浩慨
2023-03-14

您处于API级别26,其中findViewById的返回类型现在是通用的T,而不是View,因此可以推断。你可以在这里看到相关的变更日志。

所以你应该能够做到:

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

或者这个:

val recycler_view: RecyclerView = findViewById(R.id.recycler_view)
丁俊智
2023-03-14

尝试类似的东西:

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

你也可以使用Kotlin Android Extensions。查一下这里的医生
有了它,你可以在你的代码中直接调用recycler\u view

静态编程语言Android扩展:

  • 在你的应用程序gradle中。构建addapply插件:“kotlin android extensions”
  • 在您的类中,为import kotlinx添加import。Android合成的主要的

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

 类似资料:
  • 我正在尝试编写一个android静态编程语言应用程序,但我得到了以下错误。我哪里出错了? 这是我如何声明我的HashMap: 错误: 类型推断失败。没有足够的信息来推断构造函数HashMap中的参数K。请明确说明

  • 我使用KOTLIN/SPRING BOOT(2.5.4)/MAVEN/MARIA DB我遇到了这样的错误,所以我想我必须找到make bean。但是我找不到我错过的东西。你能帮我吗...? 我的项目是Kotlin com。实例测试0831└ 控制器└ 用户控制器└ 实体└ 使用者└ 存储库└ 用户存储库└ 服务└ 用户服务└ UserServiceImpl 程序包com。实例test0831.co

  • 正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。混合java kotlin hello world。除了kotlin在src/main/Java/somepackage/SomeClass中找不到我的任何Java类之外,所有的东西都正常工作。Java语言 这是什么原因? 我的身材。gradle看起来像这样 而不是开始尝试在更大的项目上实现这一点。我试图通过创

  • 本文向大家介绍动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍,包括了动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍的使用技巧和注意事项,需要的朋友参考一下 关于如题这几个概念,大部分人应该比较熟悉,但是我昏了好久,所以写下来加深印象。 1. 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如

  • 我有一个具有多个依赖项的Java项目,我想使用Kotlin DSL与Gradle一起打包到一个胖罐子中。 当我运行,构建成功,但当我尝试运行它时,它找不到主类: 以下是完整的文件: 以及我的回购协议的链接:https://github.com/darkasphalt/myapp

  • 我正在为我的应用程序创建登录页面,它给了我。 它只在错误和响应中给出错误。知道为什么会这样吗? 问题出现了,因为我没有正确检查所有的括号,因此if语句没有正确工作,并因此给出错误。 抱歉给您带来不便。我祝你下周过得愉快。我检查了第一个答案,认为是正确的。