databindingutil.setcontentview type mismatch 从使用角度区分ViewBinding和DataBinding
鄙人不才,之前一直认为可以直接使用以下形式,直接使用ViewBinding,而且我只想使用ViewBinding就行。
val mBinding:ActivityMain2Binding = DataBindingUtil.setContentView(this,R.layout.activity_main2)
但是AS报错:databindingutil.setcontentview type mismatch,
databindingutil.setcontentview(context,layoutId)返回的是ViewDataBinding,但是一般要使用bingding直接点出控件id,是需要ViewBinding,虽然ViewBinding只是一个接口,且ViewDataBinding也继承了它,为啥就是不能直接点出来控件呢?!
一般我只想用ViewBinding,就只会在build.gradle文件中写一个配置
android {。。。buildFeatures {viewBinding = true}。。。
}
这样就只使用一个不用findViewById来找控件的功能,但是看到很多文章写,可以直接
val mBinding:ActivityMain2Binding = DataBindingUtil.setContentView(this,R.layout.activity_main2)用这个mBinding就能点出控件?
但是实操狠狠打脸我粗浅的认知,查看google文档才知道有好几种情况下使用ViewBinding的方式,具体请看:
https://developer.android.com/topic/libraries/data-binding/generated-binding?hl=zh-cn
一般只使用ViewBinding,Google推荐使用
val mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mBinding.root)
这样就可以正常点出控件,直接使用了。
但是,上边那种看起来很简洁的方式,就setContentView了怎么就不能正常点出控件呢?难道是需要mBinding.root.xxx控件,AS编译还是报错。
查证后发现,如果使用val mBinding:ActivityMain2Binding = DataBindingUtil.setContentView(this,R.layout.activity_main2)这种方式,你还需要添加东西
1,build.gradle
android {。。。buildFeatures {//以下两个都要配置dataBinding = trueviewBinding = true}。。。
}
2,布局文件中外层需要添加数据绑定的标签
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools">//这个data标签也不能少<data></data>// 你的布局内容。。。</layout>
如此编译后就能正常使用DataBindingUtil点出控件了
val mBinding:ActivityMain2Binding = DataBindingUtil.setContentView(this,R.layout.activity_main2)mBinding.text.text = "1"
其实仔细看,从字面上也能理解为啥这两中binding的方式不同了,一个是ViewBinding,强调View,可以直接使用你的layoutId自动生成的类(如:R.layout.activity_main 对应ActivityMainViewBind.java,R.layout.activity_main2 对应 ActivityMain2ViewBinding.java)来点出控件。而DataBindingUtil是强调数据绑定的,当然需要在布局文件中配置data标签,和gradle中配置dataBinding = true了。
此外,你还可以在不知道layoutId的情况下使用DataBindingUtil来创建绑定:
val viewRoot = LayoutInflater.from(this).inflater(layoutId,parent,attachToParent)
val binding:ViewDataBinding? = DataBindingUtil.bind(viewRoot)
具体情况还是看:https://developer.android.com/topic/libraries/data-binding/generated-binding?hl=zh-cn。
好了上边说的有点啰嗦了,下面总结下:
1,ViewBinding
android {。。。buildFeatures {viewBinding = true}。。。
}直接这样用val mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mBinding.root)
mBinding.textview.text = "1"
2,DataBindingUtil
android {。。。buildFeatures {//以下两个都要配置dataBinding = trueviewBinding = true}。。。
}+<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools">//这个data标签也不能少<data></data>// 你的布局内容。。。</layout>这样用val mBinding:ActivityMain2Binding = DataBindingUtil.setContentView(this,R.layout.activity_main2)mBinding.text.text = "1"
databindingutil.setcontentview type mismatch 从使用角度区分ViewBinding和DataBinding相关推荐
- Scala error: type mismatch; found : java.util.List[?0] required: java.util.List[B]
Scala error: type mismatch; found : java.util.List[?0] required: java.util.List[B] 目录 Scala error: t ...
- Struts Form中Date类型之“argument type mismatch”错误解决方法
现象: 当输入页面中含有日期如2008-01-01时,如果Form中对于的字段为Date类型,则会出现"argument type mismatch"错误. 原因: Struts的 ...
- 【错误记录】Android 中使用 Kotlin 为 EditText 组件设置文本报错 ( Type mismatch. Required:Editable. Found:String )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android 中使用 Kotlin 开发 , EditText 组件如下 : 布局文件 : <EditTextandroid:id=&q ...
- 【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )
文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...
- 如何在Access中参数化日期类型,以解决Data type mismatch in criteria expression的问题...
最近的一个项目要使用Access,用惯了SQLServer,一下子回到Access真是有点不太习惯.在使用Access插入日期数据时,总报Data type mismatch in criteria ...
- IllegalArgumentException:argument type mismatch
Exception nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set proper ...
- Type mismatch:
Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement im ...
- ACCESS表达式不匹配:Data type mismatch in criteria expression.
以前没用过ACCESS,以为语法差不多,原来还是有一些区别的,报了这个错是在做一个查询的时候WHERE条件里用到日期, 这样写:...WHERE AddDate='"+@addDate+&q ...
- Type mismatch: inferred type is MainActivity but FlutterEngine was expected
问题 Type mismatch: inferred type is MainActivity but FlutterEngine was expected 解决方法 注释 android/app/s ...
最新文章
- java将字符串和字符串数组互相转换方法
- python pymysql使用连接池连接mysql示例
- org.springframework.beans.BeanUtils
- util:properties/加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?...
- C++静态库和动态库用法
- 理解全概率公式与贝叶斯公式
- 西门子PLC是怎么控制伺服电机的?
- stm32flash取数据_STM32学习笔记:读写内部Flash(介绍+附代码)
- 关于win10无法正常关机
- Windows快速查看电脑显卡及处理器型号的方法
- 如何更直观地理解 Go 调度过程
- 天父的花园-赞美之泉(音乐河4)
- 自制网页(仿B站)前端开源程序
- PPT提取文字C代码实现
- 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”
- elementui tree控制节点展开与否
- Spring Boot之定时任务
- 毕业设计 matlab led,基于Matlab的单相半波可控整流电路的设计与仿真论文和Matlab源码...
- UVM入门与进阶学习笔11——TLM通信(3)
- 玩转excel===Excel处理txt文件中的数据,Excel中的分列处理