1.BR找不到,无法自动更新

1.1 描述

  https://stackoverflow.com/questions/57983508/android-studio-kotlin-databinding-unresolved-reference-on-br

  • 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 for BR.title correctly.

    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时,会有闪烁问题,或者排序问题,

复现方法:

  1. 关闭RecyclerView item的动画,
  2. 多准备条数据,超过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的更多相关文章

  1. Android数据绑定技术一,企业级开发

    PS:数据绑定,顾名思义是数据与一些控件或者用户账号等绑定,这样用的好处是便于管理.代码清晰,量少. 首先要了解什么是数据绑定? 为什么要用数据绑定? 怎么用数据绑定? 语法的使用 简单例子,数据绑定 ...

  2. 写给Android开发者的Kotlin入门

    写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...

  3. Android数据绑定DataBinding(二)入门篇

    前言 之前写了Android数据绑定DataBinding(一)入门篇,很简单的记录了如何使用DataBinding,其初衷是想要代码中的数据发生改变,不需要繁琐的setText等操作,在最后说到了只 ...

  4. Android开发者的Kotlin:书

    原文标题:Kotlin for Android Developers: The book 原文链接:http://antonioleiva.com/kotlin-android-developers/ ...

  5. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found

    google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...

  6. android一个下拉放大库bug的解决过程及思考

    android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...

  7. 数据绑定(九)Binding的数据校验

    原文:数据绑定(九)Binding的数据校验 Binding用ValidationRules属性来校验数据的有效性,ValidationRules属性类型是Collection<Validati ...

  8. 数据绑定(十)Binding的数据转换

    原文:数据绑定(十)Binding的数据转换 当Source端Path所关联的数据与Target端目标属性数据类型不一致时,需要添加数据转换器,数据转换器是一个自定义的类,这个类需要实现IValueC ...

  9. Android开发教程 - 使用Data Binding(五)数据绑定

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

随机推荐

  1. Windows环境编译Spark源码

    一.下载源码包 1. 下载地址有官网和github: http://spark.apache.org/downloads.html https://github.com/apache/spark Li ...

  2. 关于SqlServer表结构 2(回归基础)

    关于SqlServer表结构的问题.先来了解一下SqlServer中的数据类型以及它们的用法 整型: 短整型 smallint 整型 int 长整型 bitint 标识列:identity(它是只读的 ...

  3. MySQL-安装配置篇

    一.MySQL二进制安装包安装 1.环境初始化 1)创建目录mkdir /app/database --安装路径 mkdir /data/3306 --存放数据路径 mkdir /binlog/330 ...

  4. Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependen

    Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependen ...

  5. IDEA使用GsonFormat

    安装GsonFormat插件 因为下载了最新版的idea2020.1.3发现GsonFormat在Idea商店不见了,所以去jetbrains官网下载jar包来安装插件https://plugins. ...

  6. aria2使用ajax调用/页面浏览器RPC调用aria2

    @ 目录 1. aria2使用ajax调用/页面浏览器RPC调用aria2 1.1. 总结: 1.2. ajax调用aria2-Demo 1.3. postMan命令测试 1.3.1. post基本使 ...

  7. U盘数据泄露,用不到30行的Python代码就能盗走

    今天跟大家分享下一段简单的代码,希望能给经常用U盘的人警戒,提高信息安全意识. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...

  8. canvas小画板——(2)荧光笔效果

    我们在上一篇文章中讲了如何绘制平滑曲线 canvas小画板——(1)平滑曲线. 透明度实现荧光笔 现在我们需要加另外一种画笔效果,带透明度的荧光笔.那可能会觉得绘制画笔的时候加上透明度就可以了.我们来 ...

  9. Java高级篇反射和注解

    反射是什么? 反射的作用?能带来什么好处? 反射的使用? 注解的使用? 注解和反射配合实战...

  10. vue 公众号H5 使用微信JSAPI 录音 完整齐全

    官方文档必须首当其冲 1.微信jsAPI 录音文档 2.获取微信临时素材文档 首先H5录音功能的话 对于普通H5网上是有很多的方法 插件  但是兼容性很差 特别是对于ios 一开始想的是用H5 做个通 ...