android - 在kotlin中findviewbuid作为T

标签 android generics kotlin

我的 kotlin 扩展

fun <T> View.findViewByIdCast(id : Int): T {
return findViewById(id) as T}

我的观众
var llImage: LinearLayout = itemView.findViewByIdCast(R.id.llImg)

我利用这个乐趣来获取我项目中的所有 View 项,
但是,在 androidVersion 26
它告诉我“findviewbyid 不满意:推断类型 T!不是 View 的子类型”
如何在 androidVersion 26 中修复我的扩展乐趣?

最佳答案

从 API 级别 26 开始, findViewById 方法本身(AppCompatActivityFragmentView 中的 Java 方法)是通用的——您不再需要包装它们。您可以在 this answer 中查看使用示例.

如果由于某种原因你仍然想包装它(比如你正在制作一个库并且你需要保留你的公共(public) API 或其他东西),你需要:

  • 传递泛型参数
  • 这意味着您现在可以避免 Actor
  • 最后,约束 T满足对 findViewById 的一般约束它的类型参数只能是 View

  • fun <T: View> View.findViewByIdCast(id: Int): T {
        return findViewById<T>(id)
    }
    

    关于android - 在kotlin中findviewbuid作为T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51029418/

    相关文章:

    java - java中的通用通配符。编译错误。

    java - 在 Java 泛型中,List<? super String> 是什么意思?

    java - Java中泛型类型序列化的HashMap之HashMap

    android - 为什么firebase authUI现在不能使用google账号登录,但之前可以登录

    kotlin - 如何在kotlin中进行多条件for循环

    java - 编译 : android. STORY FROM MY_TABLE 时由 : no such column: TITLE (code 1): , database.sqlite.SQLiteException : SELECT TITLE, 引起

    android - MonoDroid 下载图像到 ImageView

    java - 用户自定义布局的更简单方法

    android - 通过类 WebView 加载 URL 时出错

    android - 如何使用 MVVM 架构实现 Firebase Google SignIn?