鄙人不才,之前一直认为可以直接使用以下形式,直接使用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相关推荐

  1. 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 ...

  2. Struts Form中Date类型之“argument type mismatch”错误解决方法

    现象: 当输入页面中含有日期如2008-01-01时,如果Form中对于的字段为Date类型,则会出现"argument type mismatch"错误. 原因: Struts的 ...

  3. 【错误记录】Android 中使用 Kotlin 为 EditText 组件设置文本报错 ( Type mismatch. Required:Editable. Found:String )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android 中使用 Kotlin 开发 , EditText 组件如下 : 布局文件 : <EditTextandroid:id=&q ...

  4. 【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...

  5. 如何在Access中参数化日期类型,以解决Data type mismatch in criteria expression的问题...

    最近的一个项目要使用Access,用惯了SQLServer,一下子回到Access真是有点不太习惯.在使用Access插入日期数据时,总报Data type mismatch in criteria ...

  6. IllegalArgumentException:argument type mismatch

    Exception nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set proper ...

  7. Type mismatch:

    Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement im ...

  8. ACCESS表达式不匹配:Data type mismatch in criteria expression.

    以前没用过ACCESS,以为语法差不多,原来还是有一些区别的,报了这个错是在做一个查询的时候WHERE条件里用到日期, 这样写:...WHERE AddDate='"+@addDate+&q ...

  9. Type mismatch: inferred type is MainActivity but FlutterEngine was expected

    问题 Type mismatch: inferred type is MainActivity but FlutterEngine was expected 解决方法 注释 android/app/s ...

最新文章

  1. java将字符串和字符串数组互相转换方法
  2. python pymysql使用连接池连接mysql示例
  3. org.springframework.beans.BeanUtils
  4. util:properties/加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?...
  5. C++静态库和动态库用法
  6. 理解全概率公式与贝叶斯公式
  7. 西门子PLC是怎么控制伺服电机的?
  8. stm32flash取数据_STM32学习笔记:读写内部Flash(介绍+附代码)
  9. 关于win10无法正常关机
  10. Windows快速查看电脑显卡及处理器型号的方法
  11. 如何更直观地理解 Go 调度过程
  12. 天父的花园-赞美之泉(音乐河4)
  13. 自制网页(仿B站)前端开源程序
  14. PPT提取文字C代码实现
  15. 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”
  16. elementui tree控制节点展开与否
  17. Spring Boot之定时任务
  18. 毕业设计 matlab led,基于Matlab的单相半波可控整流电路的设计与仿真论文和Matlab源码...
  19. UVM入门与进阶学习笔11——TLM通信(3)
  20. 玩转excel===Excel处理txt文件中的数据,Excel中的分列处理

热门文章

  1. 网站页面优化必然趋势—WebP 图片!
  2. 计算任意年份之间的天数
  3. 控制面板有u盘显示,可是计算机不显示u盘符
  4. 高通 OpenXR SDK 使用指南(2)
  5. 服务器绑定自己的域名-腾讯云
  6. MD5暴力碰撞对王玉斌讲解PPT的总结
  7. mysql索引与md5_谈Mysql索引
  8. 页面老报错: 对象不支持此属性或方法
  9. uboot什么意思(uboot fastboot)
  10. 破解G*L**d2021.1.3