“错误: 对findViewById的引用不明确,Activity 中的方法 findViewById(int) 和 AppCompatActivity 中的方法 findViewById(int) 都匹配,其中, T是类型变量”
相信以上错误很多小伙伴都遇到过,最近本猿也遇到了,一番折腾才解决,特意汇总整理一下常见的解决方案。
1.网上最常见的办法是统一各个module的compileSdkVersion,向高版本看齐
2.Android Studio->File-Invalidate Caches / Restart
3.升级AS和Gradle版本
主流方案是以上3点,然而我逐个尝试之后依然无效,莫非是刮中彩票?
继续常规debug三部曲:百度->百度不到换必应->必应不到就新建demo进行对比…
画个分割线,敲黑板,加粗一下>>>
4.AS工程的build.gradle设置了framework.jar包优先编译,去掉设置优先顺序
我的工程引入了framework.jar,习惯性按照以前的方式设置了优先顺序。神坑,最近因为调试需要,将Activity改为继承自androidx.appcompat.app.AppCompatActivity结果意外暴露出问题,之前一直继承自android.app.Activity。
//以下代码的作用: 让framework.jar优先参与编译,暴露隐藏变量
//副作用: 在使用AppCompatActivity的时候findViewById无法正常使用
//错误: 对findViewById的引用不明确,Activity 中的方法 findViewById(int) 和 AppCompatActivity 中的方法 <T>findViewById(int) 都匹配
//其中, T是类型变量:
//屏蔽之后运行正常
// gradle.projectsEvaluated {
// tasks.withType(JavaCompile) {
// options.compilerArgs.add('-Xbootclasspath/p:readme/framework.jar')
// }
// }
2020.12.10更新
//如果必须设置gradle.projectsEvaluated,那么在实例化View的时候,把findViewById改为getDelegate().findViewById,这样就可以避免歧义
踩坑结束。
PS:
1.androidx真好用
2.AppCompatActivity的继承关系:
AppCompatActivity->FragmentActivity->ComponentActivity->androidx.core.app.ComponentActivity->Activity