首页 > 其他分享 >Databinding(kotlin)

Databinding(kotlin)

时间:2024-10-05 23:47:32浏览次数:3  
标签:name kotlin binding 组件 pwd Databinding public String

简单使用(只作为view获取)

  1. build.gradle.kts配置
android {
    dataBinding {
        enable = true
    }
  }
  1. activity注入
//setContentView(R.layout.activity_main)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  1. xml配置(只需要binding组件而不需要binding数据时,可以将<data></data>删除)
    在这里插入图片描述
  2. 直接使用binding获取组件,不用再findById()
  binding.button.setOnClickListener {
      binding.textView.text="Hello"
  }

binding组件原理

  • 跟入DataBindingUtil.setContentView在这里插入图片描述
  • 跟入bindToAddedViews --> bind(component, childView, layoutId)–>sMapper.getDataBinder(bindingComponent, root, layoutId)
  • 此时没有设置tag,代码也会自动设置一个tag
    *
  • 跟入private ActivityMainBindingImpl(androidx.databinding.DataBindingComponent bindingComponent, View root, Object[] bindings)
    在这里插入图片描述
  • mapBindings(DataBindingComponent bindingComponent, View view,Object[] bindings, IncludedLayouts includes, SparseIntArray viewsWithIds,boolean isRoot) 递归获取组件,存入数组bindings
  • 使用父抽象类的初始化方法,将组件绑定在对应的变量上。返回一个绑定了组件的对象。所以可以直接使用对象 . 获取组件。
  protected ActivityMainBinding(Object _bindingComponent, View _root, int _localFieldCount,
      Button button1, Button button2, LinearLayoutCompat linearLayout, ConstraintLayout main,
      TextView textView) {
    super(_bindingComponent, _root, _localFieldCount);
    this.button1 = button1;
    this.button2 = button2;
    this.linearLayout = linearLayout;
    this.main = main;
    this.textView = textView;
  }
  • 主逻辑流程图:
    在这里插入图片描述

双向绑定

android:text="@={user.pwd}"
public class User extends BaseObservable {
    private String name;
    private String pwd;


    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    @Bindable
    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }

    @Bindable
    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
        notifyPropertyChanged(BR.pwd);
    }
}

此时user和UI中的数据会自动同步更改。

同步原理

user推给UI

notifyPropertyChanged(BR.name);
在这里插入图片描述

UI推给user

在这里插入图片描述

ex:

mDirtyFlags保证只有修改的值进行推送,

  1. 初始化:
    在绑定类初始化时,mDirtyFlags 被设置为一个初始值,通常为 0,表示所有属性都是“干净”的。
  2. 设置数据:
    当数据源发生变化时,相应的位被设置为“脏”。例如,如果某个属性发生了变化,mDirtyFlags 对应的位会被置为 1。
  3. 更新视图:
    在 executeBindings 方法中,会检查 mDirtyFlags 的值,决定哪些视图需要更新。只有那些相应位被设置为“脏”的视图才会重新绑定数据。
    在这里插入图片描述

标签:name,kotlin,binding,组件,pwd,Databinding,public,String
From: https://blog.csdn.net/ysqyes/article/details/142702008

相关文章

  • 【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)
    导读大纲1.1使用集合:vararg、infix调用和解构声明1.1.1扩展Java集合API1.1.2vararg:接受任意数量参数的函数1.1.3处理pairs:Infix调用和解构声明1.1使用集合:vararg、infix调用和解构声明本节将介绍Kotlin标准库中用于处理集合的一些函数同时......
  • Kotlin:变量声明,null安全,条件语句,函数,类与对象
    目录一,变量声明1.1var和val1.2 类型推断1.3 Null安全1.3.1处理可为null性二,条件语句2.1条件语句与条件表达式2.2 智能类型转换三,函数3.1简化函数声明3.2匿名函数3.3高阶函数四,类与对象4.1构造函数4.1.1主构造函数4.1.2次构造函数一,变量声明1.1......
  • 初学者学Kotlin
    Kotlin是一种现代的、静态类型的编程语言,由JetBrains开发,它与Java100%兼容,并且被广泛用于Android应用开发。Kotlin的设计目标是更加简洁和安全,同时保持与Java生态系统的互操作性。对于初学者来说,Kotlin提供了清晰的语法和强大的功能,是一个很好的选择。###学习路......
  • 【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)
    导读大纲1.1.1从Java调用扩展函数1.1.2扩展函数无法重载1.1.1从Java调用扩展函数在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数调用它不涉及创建适配器对象或任何其他运行时开销这使得从Java使用扩展函数变得非常简单调用静态......
  • Android-kotlin相关构建下载慢的问题处理建议
    我们在导入其他的android项目获取需要手动改变android的依赖版本比如gradle版本,kotlin版本等等,点击同步构建时会发现需要很长的时间,有时还会失去连接,这是因为我们在国内的网络访问外网又没有梯子的情况下导致的下载是解决这种情况的一些建议1.使用梯子(有更好,没有看下一步)2.使用......
  • 一文轻松掌握Kotlin接口与类
    程序员常用的IDEA插件:https://github.com/silently9527/Toolkit接口Kotlin接口定义依旧使用interfaceinterfaceAnimal{funsay()}classDog:Animal{overridefunsay(){println("汪汪...")}}Kotlin使用冒号来替代Java中的extend,implementsKotli......
  • Kotlin入门实用开发技巧与注意事项
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Kotlin,这门由JetBrains开发的现代编程语言,自2017年被Google宣布为Android官方开发语言以来,便迅速在开发者社区中流行起来。它以其简洁的语法、空安全的特性......
  • android kotlin 基础复习 继承 inherit
    1、新建文件kt2、代码:/**用户基类**/openclassPerson1(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")println("name:${name},age:${age}")......
  • Kotlin协程的取消机制:深入理解和优雅实现
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Kotlin协程提供了一种高效的方式来处理并发和异步任务。在协程的生命周期管理中,取消协程是一项重要的操作。本文将深入探讨Kotlin协程的取消机制,介绍除了直接使用Job的cancel......
  • Kotlin快速入门,全是干货没有废话
    Kotlin基础数据类型在kotlin中,变量使用var关键字声明,常量使用val关键字声明。变量声明可以通过变量名:数据类型的形式显式声明,也可以通过自动推导的方式声明。//通过【变量名:数据类型】的形式声明变量varname:String="Soria"valage:Int=18//可以不显式声明......