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

Android Studio中Kotlin报‘Not enough information to infer type variable T’如何解决?

解决Kotlin中findViewById类型推断错误及实现raw文件夹视频播放

错误原因

findViewById是泛型方法,当Kotlin无法自动推断其返回类型时,就会抛出Not enough information to infer type variable T错误,只需明确指定类型即可解决。

三种解决方式

方式一:显式声明变量类型

直接给videoView变量指定VideoView类型:

val videoView: VideoView = findViewById(R.id.testView)

方式二:给findViewById指定泛型参数

在findViewById后通过<>明确指定泛型类型:

val videoView = findViewById<VideoView>(R.id.testView)

方式三:推荐使用View Binding(更简洁安全)

View Binding是Android官方推荐的视图绑定方式,无需手动调用findViewById,彻底避免类型推断问题:

  1. 在模块的build.gradle.kts(Groovy语法用build.gradle)中启用View Binding:
android {
    buildFeatures {
        viewBinding = true
    }
}
  1. 在Activity中使用绑定类:
import android.net.Uri
import android.os.Bundle
import android.widget.MediaController
import androidx.appcompat.app.AppCompatActivity
import com.example.video_player.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        // 直接通过绑定对象获取VideoView
        val videoView = binding.testView
    }
}

完整实现raw文件夹视频播放

以方式一为例,添加视频播放的完整逻辑(假设raw文件夹下的视频名为sample.mp4):

import android.net.Uri
import android.os.Bundle
import android.widget.MediaController
import android.widget.VideoView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 解决类型推断错误
        val videoView: VideoView = findViewById(R.id.testView)
        
        // 设置媒体控制器(提供播放、暂停、进度控制)
        val mediaController = MediaController(this)
        mediaController.setAnchorView(videoView)
        videoView.setMediaController(mediaController)
        
        // 构建raw视频的Uri
        val videoUri = Uri.parse("android.resource://${packageName}/${R.raw.sample}")
        videoView.setVideoURI(videoUri)
        
        // 开始播放视频
        videoView.start()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:43:33