美文网首页
Android-DataBinding-使用-入门

Android-DataBinding-使用-入门

作者: CodeMagic | 来源:发表于2020-02-13 12:20 被阅读0次

概述

  • 本节只针没用过DataBinding的入门介绍;

编译环境

  • 在各moudule(app或者library)的build.gradle文件中添加以下代码
      android {
          dataBinding {
              enabled = true
          }
      }
    
  • 由于项目中开启了AndroidX组件库,所以不需要依赖相应第三方库;开启AndroidX组件库,需在整个项目的gradle.properties中添加以下代码
    android.useAndroidX=true
    # Automatically convert third-party libraries to use AndroidX
    android.enableJetifier=true
    
  • 如果DataBinding要和ViewModel/LiveData/Lifecycle结合使用,需要在module的build.gradle文件的dependencies中添加对应的依赖项;

XML

  • layout文件根节点变为<layout>,子节点为<data>和View树根节点,<data>的子节点有<import>和<variable>,代码如下
    <layout>
      <data>
          <import type="com.example.android.ClassA"/>
          <variable
              name="varA"
              type="ClassA" />
      </data>
      <!--View树根节点-->
      <androidx.constraintlayout.widget.ConstraintLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    
          <TextView
              android:id="@+id/tv_title"
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:gravity="center"
              android:textColor="@android:color/black"
              android:text="@{varA.hello}"
              app:layout_constraintLeft_toLeftOf="parent"
              app:layout_constraintRight_toRightOf="parent"
              app:layout_constraintTop_toTopOf="parent"/>
      </androidx.constraintlayout.widget.ConstraintLayout>
    </layout>
    
  • <data>节点中声明的变量,可以在View的属性中直接使用,@{}@={}表示绑定表达式,表达式的值就是对应的属性值;

代码

  • 生成Binding对象
    • 如果是Activity的布局文件,可以通过以下代码生成Binding对象
      DataBindingUtil.setContentView(@NonNull Activity activity,
              int layoutId)
      
    • 如果是普通layout文件,可以通过以下代码生成Binding对象
      DataBindingUtil.inflate(@NonNull LayoutInflater inflater,
              int layoutId, @Nullable ViewGroup parent, boolean attachToParent)
      
    • 如果是已经通过LayoutInflater解析出来的View,可以通过以下代码生成Binding对象
      DataBindingUtil.bind(@NonNull View root)
      
    • Binding类名默认根据layout命名生成,比如layout文件名为activity_main,那么Binding类名为ActivityMainBinding/ActivityMainBindingImp;
    • Binding对象尽早生成,以防止View树的变更或者View的Tag被修改;
  • 绑定数据
    • 获取到Binding对象之后,就可以对在XML中声明的变量进行数据绑定,View会根据最新数据自动更新UI;
    • 绑定数据对应的方法名根据XML中声明的变量名
      binding.setVarA(ClassA a);
      
      也可以通过以下方法修改(variablId为BR中对应的id)
      binding.setVariable(int variableId, @Nullable Object value)
      

相关文章

网友评论

      本文标题:Android-DataBinding-使用-入门

      本文链接:https://www.haomeiwen.com/subject/fvjrzctx.html