当前位置: 首页> 健康> 知识 > 云南省疾控中心最新提示_制作app需要什么软件_南京网站推广排名_网站推广优化设计方案

云南省疾控中心最新提示_制作app需要什么软件_南京网站推广排名_网站推广优化设计方案

时间:2025/7/10 0:56:27来源:https://blog.csdn.net/ysqyes/article/details/142702008 浏览次数:0次
云南省疾控中心最新提示_制作app需要什么软件_南京网站推广排名_网站推广优化设计方案

简单使用(只作为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;}@Bindablepublic String getName() {return name;}public void setName(String name) {this.name = name;notifyPropertyChanged(BR.name);}@Bindablepublic 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 的值,决定哪些视图需要更新。只有那些相应位被设置为“脏”的视图才会重新绑定数据。
    在这里插入图片描述
关键字:云南省疾控中心最新提示_制作app需要什么软件_南京网站推广排名_网站推广优化设计方案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: