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. CF习题集二

    CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...

  2. opencv图片缩放与镜像

    一个练习的代码,先对图片进行缩放,然后再做镜像: import cv2 import numpy as np img = cv2.imread("src.jpg", 1) cv2. ...

  3. java目前常用的几种定时任务

    java目前常用的几种定时任务 JDK自带的Timer spring的Task Quartz elastic-job分布式定时任务 一.JDK自带的Timer Timer是jdk中提供的一个定时器工具 ...

  4. nvcc fatal : Path to libdevice library not specified

    安装完成后,配置环境变量,在home下的.bashrc中加入 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export ...

  5. C#LeetCode刷题之#561-数组拆分 I(Array Partition I)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3718 访问. 给定长度为 2n 的数组, 你的任务是将这些数分成 ...

  6. effective java之使用构建器来创建对象

    第二章第2条:遇到多个构造器参数时要考虑使用构建器(builder) 就是建造者模式(不直接生成想要的对象,而是让客户端利用所有有必要的参数调用构造器或者静态工厂)直接上代码 package com. ...

  7. Deep learning-based personality recognition from text posts of online social networks 阅读笔记

    文章目录 一.摘要 二.模型过程 1.文本预处理 1.1 文本切分 1.2 文本统一 2. 基于统计的特征提取 2.1 提取特殊的语言统计特征 2.2 提取基于字典的语言特征 3. 基于深度学习的文本 ...

  8. golang 数据类型/基础语法

    常量 变量 复合类型 结构体 数组 基础类型 整型 浮点型 复数 bool 值 字符型 字符串 错误(稍微有异议) 引用类型 切片 指针 字典 管道 函数 接口 其他语法结构 包 流程控制 运算符 注 ...

  9. Android 开发学习进程0.15 adb cardview framelayout 控件设置状态获取焦点

    Android设备调试桥 即adb 使用adb进行无线调试的一些常用命令 adb tcpip 5555 设置调试端口为5555 防止冲突 adb shell ifconfig wlan0 查询局域网中 ...

  10. MySQL设置跳过密码验证

    1.linux系统下 在/etc/my.cnf文件中, [mysqld]下面新增skip-grant-tables,然后重启服务器.