Android Studio显示错误
对CharSequence的意外隐式强制转换:布局标记为TextView
此代码
findViewById<TextView>(R.id.tv_name).text = "text"
如果我写
(findViewById<TextView>(R.id.tv_name) as TextView).text = "text"
一切都很好。
问题是为什么会这样? findViewById<TextView>
是否已经有TextView
类型?
答案 0 :(得分:1)
您可以使用Kotlin Android Extensions
Kotlin Android Extensions是Kotlin插件,可以以惊人的无缝方式从活动,碎片和视图中恢复视图。
你可以直接使用
tv_name.text = "text"
不需要findViewById
答案 1 :(得分:0)
您可以使用DataBinding直接使用所有视图。更少的代码和Android的非常先进的功能。 Android DataBinding有很多文章。 https://developer.android.com/topic/libraries/data-binding/index.html
答案 2 :(得分:0)
这只是棉绒的警告。您可以使用@SuppressLint("WrongViewCast")
忽略它。这是因为在Kotlin中使用Java中的泛型类型。
答案 3 :(得分:0)
首先,Kotlin在引擎盖下,只是包装了java findViewById方法。由于方法返回View,最多API 26显式转换,但现在它返回。请检查此回答No need to cast the result of findViewById?
如果您深入了解源代码,通过findViewById的调用,您将获得Window.findViewById方法,如果您在文档中查看它的描述,那么您会看到一个注释,其中说:&#34;在大多数情况下 - 根据编译器支持 - 生成的视图会自动转换为目标类类型。如果目标类类型不受约束,则可能需要显式强制转换。&#34; https://developer.android.com/reference/android/view/Window.html#findViewById(int)
我不知道&#34;不受约束的&#34;实际上意味着在这种情况下,但据我所知,在某些情况下,其他人不需要施法,所以只需处理它。例如,我试图向ImageView添加一些参数,编译器没有显示任何类型的警告:
findViewById<ImageView>(R.id.iv).adjustViewBounds = true