You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取按钮资源时无法推断类型变量T的问题求助

解决按钮数组创建报错的问题

首先明确:kotlin-android-extensions 插件已被官方废弃,依赖它无法解决问题,推荐采用以下几种方案:

方案1:手动处理View可空性

findViewById默认返回可空的View?类型,直接放入数组会因类型不匹配报错,可明确指定View类型并处理空安全:

// 确认button0存在于布局中时,强转类型并确保非空
val buttons = arrayOf(findViewById<Button>(R.id.button0)!!)

若要避免空指针风险,可先做非空判断:

val button = findViewById<Button>(R.id.button0)
val buttons = button?.let { arrayOf(it) } ?: emptyArray()

方案2:使用View Binding(官方推荐)

View Binding是替代kotlin-android-extensions的官方方案,类型安全且能避免空指针问题:

  1. 在模块的build.gradle(或build.gradle.kts)中启用View Binding:
android {
    buildFeatures {
        viewBinding true
    }
}
  1. 同步项目后,布局文件会自动生成对应Binding类(如布局名为activity_main.xml,生成ActivityMainBinding)
  2. 在Activity中初始化Binding并获取按钮:
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    
    val buttons = arrayOf(binding.button0)
}

方案3:确认调用时机

确保findViewById是在onCreate(或其他布局已加载的生命周期方法)中调用,布局未加载时调用会返回null,引发报错。

内容的提问来源于stack exchange,提问作者KExpress

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:37:05