作者:2分之11989_330 | 来源:互联网 | 2023-01-30 12:55
当我试图找到一个RecycleView
id 时,我收到以下错误.
错误: -
类型推断失败:没有足够的信息来推断参数T.
码:
class FirstRecycleViewExample : AppCompatActivity() {
val data = arrayListOf()
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
}
}
Kevin Robate..
91
尝试类似的东西:
val recyclerView = findViewById(R.id.recycler_view)
你也可以使用Kotlin Android Extensions
它.在这里查看文档.
有了它,您可以recycler_view
直接在您的代码中调用.
Kotlin Android扩展程序:
在您的应用中gradle.build
添加apply plugin: 'kotlin-android-extensions'
在您的类中添加import,import kotlinx.android.synthetic.main..*
其中
包含布局的文件名.
就是这样,你可以recycler_view
直接在你的代码中调用.
它是如何工作的?第一次调用时recycler_view
,调用findViewById
已完成并缓存.
1> Kevin Robate..:
尝试类似的东西:
val recyclerView = findViewById(R.id.recycler_view)
你也可以使用Kotlin Android Extensions
它.在这里查看文档.
有了它,您可以recycler_view
直接在您的代码中调用.
Kotlin Android扩展程序:
在您的应用中gradle.build
添加apply plugin: 'kotlin-android-extensions'
在您的类中添加import,import kotlinx.android.synthetic.main..*
其中
包含布局的文件名.
就是这样,你可以recycler_view
直接在你的代码中调用.
它是如何工作的?第一次调用时recycler_view
,调用findViewById
已完成并缓存.
2> zsmb13..:
您处于API级别26,其中返回类型findViewById
现在是通用的,T
而不是View
因此可以推断出来.您可以在此处查看相关的更改日志.
所以你应该能够做到这一点:
val recycler_view = findViewById(R.id.recycler_view)
或这个:
val recycler_view: RecyclerView = findViewById(R.id.recycler_view)
3> Alf Moh..:
通常Kotlin可以使用括号中提供的信息推断您的类型.
在这种情况下,它不能这样你必须像这样明确地指定它
findViewById(R.id.recycler_view)
虽然不太确定类型但是你应该如何指定它
我想补充一点,使用Anko,您可以进一步简化代码,如下所示:
val recycler_view : RecyclerView = find(R.id.recycler_view)
4> Ravindra Kus..:
在Kotlin
我们可以得到视图的ID不使用的 findViewById
语法.
例如,我们使用以下布局,我们将获得视图的id并执行操作
布局
我们可以使用以下代码找到视图的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而不使用findviewbyid
语法.
有关此主题的更多信息,请参阅此链接: - 单击此处