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,彻底避免类型推断问题:
- 在模块的
build.gradle.kts(Groovy语法用build.gradle)中启用View Binding:
android { buildFeatures { viewBinding = true } }
- 在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
相关产品推荐
相关产品推荐

