Android Activity使用ViewBinding提示需传入ViewGroup参数该如何解决?
问题根因
- 你遇到的
inflate方法缺失单参数重载的核心原因是:你的activity_main.xml根布局使用了<merge>标签。用<merge>作为根节点的布局生成的ViewBinding类,不会生成仅接收LayoutInflater参数的重载方法,因为<merge>标签的特性要求布局必须依附到一个父ViewGroup中,所以必须传入parent参数。 - 你尝试DataBinding报错的原因是仅开启了ViewBinding配置,没有开启DataBinding,不需要混用这两个功能,纯ViewBinding场景不需要调用DataBinding相关API。
解决方案
情况1:你确实需要使用作为根布局
使用Activity内置的contentView作为parent参数即可,写法如下:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 第三个参数attachToRoot传true,会自动将布局挂载到content父容器下,不需要额外调用setContentView binding = ActivityMainBinding.inflate(layoutInflater, findViewById(android.R.id.content), true) }
情况2:你没有使用标签,属于构建缓存异常
直接清理项目构建缓存后重新构建即可:
- 点击Android Studio菜单栏
Build -> Clean Project - 再点击
Build -> Rebuild Project
重新构建后就会生成带单参数inflate重载的Binding类,之后用标准写法即可:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) // 注意必须将绑定类的根View设置到Activity setContentView(binding.root) }
内容的提问来源于stack exchange,提问作者Tobias Reich
相关产品推荐
相关产品推荐

