在升级编译SDK
版本到26之后,所有的findViewById
都显示错误:
没有足够的信息来推断函数中的参数T,请检查fun findViewById(id: Int): T!。
在升级编译SDK
版本到26之后,所有的findViewById
都显示错误:
没有足够的信息来推断函数中的参数T,请检查fun findViewById(id: Int): T!。
val textInput = findViewById(R.id.edit_text) as TextInputLayout
使用以下任一方法:
val textInput:TextInputLayout = findViewById(R.id.edit_text)
或者:
val textInput = findViewById<TextInputLayout>(R.id.edit_text)
如果你想了解背后发生了什么,从O版本开始,底层方法已更改为
public <T extends View> T findViewById(@IdRes int id) {
return this.getDelegate().findViewById(id);
}
在纯Java中,例如,您将拥有
TextView textView = findViewById(R.id.textview1);
val textView = findViewById<TextView>(R.id.textview1)
这是 Kotlin 中的某种类型错误,请修复它
val result = findViewById <TextView>(R.id.textView_result) as TextView
val button_sum = findViewById<Button>(R.id.button_sum) as Button
val editText_i1 = findViewById<EditText>(R.id.editText_i1) as EditText
由于您混淆了java
和kotlin
,在Android Studio 3.0
中,您可以使用kotlin
语法代替java
语法,或者像Android官方博客中提到的那样两者都可以使用。
还可以阅读有关在Android上开始使用Kotlin
的文章。
更新:函数签名View findViewById(int id)
已升级为<T extends View>T findViewById(int id)
,这意味着它应用了返回类型的推断机制,其中T extends View
表示View或其子类型。
注意:正如最初提到的那样,应用强制转换仍不会生成任何错误,但只会产生一个lint警告,因为使用不必要的强制转换可能是kotlin类型推断中的一个错误,但不是在java中。