添加Firebase后Fragment返回binding.root遇接收器类型不匹配错误求助
兄弟,我帮你捋清楚这个问题了——你在Project build.gradle里加了Firebase的google-services:4.3.3后,Fragment里返回binding.root报错,提示接收器类型不匹配、指向kotlin.io的File.root,这完全是命名冲突搞的鬼!
问题根源
老版本的google-services插件(比如你用的4.3.3)的依赖链里,可能间接引入了某个库,导致编译器把你ViewBinding对象里的root属性,误判成了kotlin.io包下File类的扩展属性,两者类型完全不搭,自然就报错了。
解决办法,按优先级来:
优先升级google-services插件版本:4.3.3是好几年前的老版本了,新版本早就修复了这类潜在的命名冲突问题。把Project build.gradle里的classpath改成最新稳定版,比如:
classpath 'com.google.gms:google-services:4.4.1' // 也可以去Firebase官网查最新稳定版改完后同步项目,大概率直接解决问题,还能顺便用上Firebase的新特性和bug修复。
明确指定返回类型:如果暂时不想升级插件,就在return的时候强制指定类型,让编译器明确你要的是View类型的root:
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val binding: FragmentPublicationsBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_publications, container, false) return binding.root as View // 明确强转成View类型 }检查ViewBinding配置+清理缓存:先确认app模块的build.gradle里已经正确开启了ViewBinding:
android { ... buildFeatures { viewBinding true } }然后试试Android Studio的
Build -> Clean Project->Build -> Rebuild Project,或者File -> Invalidate Caches/Restart,有时候缓存抽风也会导致这种离谱的类型解析错误。
内容的提问来源于stack exchange,提问作者Rarity7-

