Android app开发:对findViewById的引用不明确

“错误: 对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

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值