android 数据绑定(5) kotlin 的binding bug
1.BR找不到,无法自动更新
1.1 描述
I have some code that is generating a "red squiggly" error in Android Studio:
@get:Bindable
var title: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.title)
}It complains that "title" is an unresolved reference on
BR.title. Building and running works fine though, and this is the only error I can see. I debug there and see that it's gotten the value forBR.titlecorrectly.Still, I can't figure out how to make it go away. I verified that the generated BR class has the "title" field, but Android Studio refuses to recognize this. I've looked up people having this issue and have tried the following: (unsuccessfully)
- Closing Android Studio, deleting the .gradle, .idea and build folders and restarting
- Build -> Clean Project, Rebuild Project
- File -> Invalidate Caches and restart
- Disabling and enabling the Kotlin plugin
- Closing and reopening the project
I have also checked and I have
apply plugin: 'kotlin-kapt'in build.gradle.
1.2 解决方法
apply plugin: 'com.android.application' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions' android { dataBinding {
enabled = true
} } dependencies { ...
kapt 'com.android.databinding:compiler:3.2.0-alpha10'
}
- apply plugin: 'kotlin-kapt'
- kapt 'com.android.databinding:compiler:3.2.0-alpha10'
2. 闪烁bug
item使用数据绑定时,当复用ViewHolder时,会有闪烁问题,或者排序问题,
复现方法:
- 关闭RecyclerView item的动画,
- 多准备条数据,超过1屏,上下滚动,长按item进入编辑状态,选中item,就会出现。
3.不自动更新
3.1 问题描述
kotlin与Java 混合时, kotlin修改java里的data ,不自动更新
- 定义类
public class Data extends BaseObservable { public int icon ;
public String key ;
public int value ;
public String test = ""; @Bindable public String getKey() { return key;}
@Bindable public int getValue() { return value; }
@Bindable public int getIcon() {
return icon;
}
@Bindable public String getTest(){
return test;
} public void setKey(String key) {
this.key = key;
notifyPropertyChanged(BR.key);
} public void setValue(int value) {
this.value = value;
notifyPropertyChanged(BR.value);
}
public void setIcon(int icon) {
this.icon = icon;
notifyPropertyChanged(BR.icon);
}
public void setTest(String ss){
this.test = ss;
notifyPropertyChanged(BR.test);
} @Override
public String toString() {
return "key = " + key + " value = " + value;
}
}
- 布局中
<TextView
android:id="@+id/data_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginLeft="32dp"
android:layout_marginTop="32dp"
android:text='@{data.key}'
app:layout_constraintStart_toStartOf="@+id/data_title"
app:layout_constraintTop_toBottomOf="@+id/data_title" /> <TextView
android:id="@+id/data_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:text='@{String.valueOf(data.value)}'
app:layout_constraintStart_toEndOf="@+id/data_key"
app:layout_constraintTop_toTopOf="@+id/data_key" />
- 修改data值
fun onDataThreadMainClicked(view: View){
val random = (Math.random() * ).toInt()
data.key = "新Main key$random"
data.value = random
binding.data = data
}
结果:界面不刷新
3.2 解决办法
fun onDataThreadMainClicked(view: View){
val random = (Math.random() * ).toInt()
data.key = "新Main key$random"
data.value = random
binding.data = data
}
或者
fun onDataThreadMainClicked(view: View){
val random = (Math.random() * ).toInt()
data.key = "新Main key$random"
data.value = random
binding.invalidateAll()
}
android 数据绑定(5) kotlin 的binding bug的更多相关文章
- Android数据绑定技术一,企业级开发
PS:数据绑定,顾名思义是数据与一些控件或者用户账号等绑定,这样用的好处是便于管理.代码清晰,量少. 首先要了解什么是数据绑定? 为什么要用数据绑定? 怎么用数据绑定? 语法的使用 简单例子,数据绑定 ...
- 写给Android开发者的Kotlin入门
写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...
- Android数据绑定DataBinding(二)入门篇
前言 之前写了Android数据绑定DataBinding(一)入门篇,很简单的记录了如何使用DataBinding,其初衷是想要代码中的数据发生改变,不需要繁琐的setText等操作,在最后说到了只 ...
- Android开发者的Kotlin:书
原文标题:Kotlin for Android Developers: The book 原文链接:http://antonioleiva.com/kotlin-android-developers/ ...
- [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found
google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...
- android一个下拉放大库bug的解决过程及思考
android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...
- 数据绑定(九)Binding的数据校验
原文:数据绑定(九)Binding的数据校验 Binding用ValidationRules属性来校验数据的有效性,ValidationRules属性类型是Collection<Validati ...
- 数据绑定(十)Binding的数据转换
原文:数据绑定(十)Binding的数据转换 当Source端Path所关联的数据与Target端目标属性数据类型不一致时,需要添加数据转换器,数据转换器是一个自定义的类,这个类需要实现IValueC ...
- Android开发教程 - 使用Data Binding(五)数据绑定
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
随机推荐
- Docker学习日记-安装Docker
Docker是什么: 简单理解就是基于go语言开发的开源的应用容器引擎. 对进程进行封装隔离,属于操作系统层面的虚拟化技术. Docker的优势: 1.更高效的利用系统资源 2.更快速的启动时间 3. ...
- JVM系列之:从汇编角度分析Volatile
目录 简介 重排序 写的内存屏障 非lock和LazySet 读的性能 总结 简介 Volatile关键字对熟悉java多线程的朋友来说,应该很熟悉了.Volatile是JMM(Java Memory ...
- CSS基础知识(下)
3.层叠 稍微复杂的样式表中都可能存在两条甚至多条规则同时选择一个元素的情况.CSS通过一种叫作层叠(cascade)的机制来处理这种冲突. 层叠机制的原理是为规则赋予不同的重要程度.最重要的是作者样 ...
- 云原生数据库mysql对共享存储分布式文件系统的接口需求分析
1. 引言 云原生数据库跟分布式mpp数据库是有差异的,虽然两者都是计算与存储分离,但是在资源的占用上有所不同.云原生数据库是shard everything架构,其依赖的存储资源.内存资源.事务资源 ...
- 编译原理 First集和Follow集的求法
转载地址 https://blog.csdn.net/Alexander_Frank/article/details/51280798 自上而下分析: FIRST集求法 First集合最终是对产生式右 ...
- 使用 VMware Workstation Pro 让 PC 提供云桌面服务——学习笔记(一)
最终效果: 能够通过xshell等终端设备, 远程访问虚拟机 操作步骤 1. 安装VMware 网上自行下载VMware 软件,这里不给出详细操作 2. 下载安装系统 这里使用 Centos 的lin ...
- 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...
- 深度优先搜索(dfs)与出题感想
在3月23号的广度优先搜索(bfs)博客里,我有提到写一篇深搜博客,今天来把这个坑填上. 第一部分:深度优先搜索(dfs) 以上来自百度百科. 简单来说,深度优先搜索算法就是——穷举法,即枚举所有情况 ...
- python3 - selenium常用的参数
# 选用开发者模式,创建一个浏览器对象,可避免被检测到是selenium模拟浏览器 chrome_options = webdriver.ChromeOptions() chrome_options ...
- springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置
简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...