[文章] 1、Android开发Jetpack-Databinding基本使用 Android开发Jetpack-Databinding基本使用官方文档地址:https://developer.android.com/topic/libraries/data-binding人类自从有Android系统以来,我们绑定数据从findViewById开始,需要强转控件类型,随着SDK的升级,不再需要强转类型。顺带还有黄油刀,就是为了简化我们的开发。我们可以不再使用findViewById去找控件,然后再设置数据了。如果数据更新了,还得重新设置。接下来我们就了解一下Databinding吧。所以接下来我们要通过Databinding实现一般页面的数据绑定,列表的数据绑定,图片的数据绑定等常见的场景。让你的项目支持Databindingandroid{...dataBinding{enabled=true}}基本使用先来一个布局,我们要显示用户的信息,包括姓名,年龄和性别创建bean类,用于封装用户数据packagecom.sunofbeaches.databindingdemo.domaindataclassUser(varname:String,varage:Int,vargender:Gender)enumclassGender{FEMALE,MALE}布局代码<?xmlversion="1.0"encoding="utf-8"?><layout><data><variablename="user"type="com.sunofbeaches.databindingdemo.domain.User"/></data><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.10259918"/><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.2"/><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.3"/><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.3"/><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/text_name"app:layout_constraintBottom_toTopOf="@+id/guideline"app:layout_constraintEnd_toStartOf="@+id/guideline4"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/text_age"app:layout_constraintBottom_toTopOf="@+id/guideline2"app:layout_constraintEnd_toStartOf="@+id/guideline4"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline"/><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/text_gender"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toStartOf="@+id/guideline4"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline2"/><TextViewandroid:id="@+id/textView4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name}"app:layout_constraintBottom_toTopOf="@+id/guideline"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline4"app:layout_constraintTop_toTopOf="parent"/><TextViewandroid:id="@+id/textView6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.gender.toString()}"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline4"app:layout_constraintTop_toTopOf="@+id/guideline2"/><TextViewandroid:id="@+id/textView7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(user.age)}"app:layout_constraintBottom_toTopOf="@+id/guideline2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline4"app:layout_constraintTop_toTopOf="@+id/guideline"/></androidx.constraintlayout.widget.ConstraintLayout></layout>MainActivity.kt的代码classMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)//把布局交给DataBindingUtilvalactivityMainBinding:ActivityMainBinding=DataBindingUtil.setContentView(this,R.layout.activity_main)//设置数据activityMainBinding.user=User("TrillGates",30,Gender.MALE)}}运行结果由此,我们就完成了数据的绑定,我们没有给控件起id,里面的id是自动生成的,我们不用也行。这是不是跟vue.js里一样呀,绑定数据就可以了,非常简单。说明这里面我们布局最外层使用Layout标签进行包裹layout你可以手动写,或者按alt+回车提示你自动改data标签<data><variablename="user"type="com.sunofbeaches.databindingdemo.domain.User"/></data>这里面我们用于置顶bean类,也可以这样写:<data><importtype="com.sunofbeaches.databindingdemo.domain.User"/><variablename="user"type="User"/></data>ActivityMainBinding是自动生成的类,大家可以看看以下代码,对应着以上的布局代码//Generatedbydatabindingcompiler.Donotedit!packagecom.sunofbeaches.databindingdemo.databinding;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.TextView;importandroidx.annotation.NonNull;importandroidx.annotation.Nullable;importandroidx.constraintlayout.widget.Guideline;importandroidx.databinding.Bindable;importandroidx.databinding.DataBindingUtil;importandroidx.databinding.ViewDataBinding;importcom.sunofbeaches.databindingdemo.R;importcom.sunofbeaches.databindingdemo.domain.User;importjava.lang.Deprecated;importjava.lang.Object;publicabstractclassActivityMainBindingextendsViewDataBinding{@NonNullpublicfinalGuidelineguideline;@NonNullpublicfinalGuidelineguideline2;@NonNullpublicfinalGuidelineguideline3;@NonNullpublicfinalGuidelineguideline4;@NonNullpublicfinalTextViewtextView;@NonNullpublicfinalTextViewtextView2;@NonNullpublicfinalTextViewtextView3;@NonNullpublicfinalTextViewtextView4;@NonNullpublicfinalTextViewtextView6;@NonNullpublicfinalTextViewtextView7;@BindableprotectedUsermUser;protectedActivityMainBinding(Object_bindingComponent,View_root,int_localFieldCount,Guidelineguideline,Guidelineguideline2,Guidelineguideline3,Guidelineguideline4,TextViewtextView,TextViewtextView2,TextViewtextView3,TextViewtextView4,TextViewtextView6,TextViewtextView7){super(_bindingComponent,_root,_localFieldCount);this.guideline=guideline;this.guideline2=guideline2;this.guideline3=guideline3;this.guideline4=guideline4;this.textView=textView;this.textView2=textView2;this.textView3=textView3;this.textView4=textView4;this.textView6=textView6;this.textView7=textView7;}publicabstractvoidsetUser(@NullableUseruser);@NullablepublicUsergetUser(){returnmUser;}@NonNullpublicstaticActivityMainBindinginflate(@NonNullLayoutInflaterinflater,@NullableViewGrouproot,booleanattachToRoot){returninflate(inflater,root,attachToRoot,DataBindingUtil.getDefaultComponent());}/***ThismethodreceivesDataBindingComponentinstanceastypeObjectinsteadof*typeDataBindingComponenttoavoidcausingtoomanycompilationerrorsif*compilationfailsforanotherreason.*https://issuetracker.google.com/issues/116541301*@DeprecatedUseDataBindingUtil.inflate(inflater,R.layout.activity_main,root,attachToRoot,component)*/@NonNull@DeprecatedpublicstaticActivityMainBindinginflate(@NonNullLayoutInflaterinflater,@NullableViewGrouproot,booleanattachToRoot,@NullableObjectcomponent){returnViewDataBinding.<ActivityMainBinding>inflateInternal(inflater,R.layout.activity_main,root,attachToRoot,component);}@NonNullpublicstaticActivityMainBindinginflate(@NonNullLayoutInflaterinflater){returninflate(inflater,DataBindingUtil.getDefaultComponent());}/***ThismethodreceivesDataBindingComponentinstanceastypeObjectinsteadof*typeDataBindingComponenttoavoidcausingtoomanycompilationerrorsif*compilationfailsforanotherreason.*https://issuetracker.google.com/issues/116541301*@DeprecatedUseDataBindingUtil.inflate(inflater,R.layout.activity_main,null,false,component)*/@NonNull@DeprecatedpublicstaticActivityMainBindinginflate(@NonNullLayoutInflaterinflater,@NullableObjectcomponent){returnViewDataBinding.<ActivityMainBinding>inflateInternal(inflater,R.layout.activity_main,null,false,component);}publicstaticActivityMainBindingbind(@NonNullViewview){returnbind(view,DataBindingUtil.getDefaultComponent());}/***ThismethodreceivesDataBindingComponentinstanceastypeObjectinsteadof*typeDataBindingComponenttoavoidcausingtoomanycompilationerrorsif*compilationfailsforanotherreason.*https://issuetracker.google.com/issues/116541301*@DeprecatedUseDataBindingUtil.bind(view,component)*/@DeprecatedpublicstaticActivityMainBindingbind(@NonNullViewview,@NullableObjectcomponent){return(ActivityMainBinding)bind(component,view,R.layout.activity_main);}}