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 ...
随机推荐
- CF习题集二
CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...
- opencv图片缩放与镜像
一个练习的代码,先对图片进行缩放,然后再做镜像: import cv2 import numpy as np img = cv2.imread("src.jpg", 1) cv2. ...
- java目前常用的几种定时任务
java目前常用的几种定时任务 JDK自带的Timer spring的Task Quartz elastic-job分布式定时任务 一.JDK自带的Timer Timer是jdk中提供的一个定时器工具 ...
- nvcc fatal : Path to libdevice library not specified
安装完成后,配置环境变量,在home下的.bashrc中加入 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export ...
- C#LeetCode刷题之#561-数组拆分 I(Array Partition I)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3718 访问. 给定长度为 2n 的数组, 你的任务是将这些数分成 ...
- effective java之使用构建器来创建对象
第二章第2条:遇到多个构造器参数时要考虑使用构建器(builder) 就是建造者模式(不直接生成想要的对象,而是让客户端利用所有有必要的参数调用构造器或者静态工厂)直接上代码 package com. ...
- Deep learning-based personality recognition from text posts of online social networks 阅读笔记
文章目录 一.摘要 二.模型过程 1.文本预处理 1.1 文本切分 1.2 文本统一 2. 基于统计的特征提取 2.1 提取特殊的语言统计特征 2.2 提取基于字典的语言特征 3. 基于深度学习的文本 ...
- golang 数据类型/基础语法
常量 变量 复合类型 结构体 数组 基础类型 整型 浮点型 复数 bool 值 字符型 字符串 错误(稍微有异议) 引用类型 切片 指针 字典 管道 函数 接口 其他语法结构 包 流程控制 运算符 注 ...
- Android 开发学习进程0.15 adb cardview framelayout 控件设置状态获取焦点
Android设备调试桥 即adb 使用adb进行无线调试的一些常用命令 adb tcpip 5555 设置调试端口为5555 防止冲突 adb shell ifconfig wlan0 查询局域网中 ...
- MySQL设置跳过密码验证
1.linux系统下 在/etc/my.cnf文件中, [mysqld]下面新增skip-grant-tables,然后重启服务器.