• Jetpack DataBinding使用--Jetpack系列


    DataBinding是一种支持库,借助该库,可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。布局通常是使用调用界面框架方法的代码在 Activity 中定义的。

    1、引入支持
    build.gradleandroid中添加如下代码,然后sync project

    1. android {
    2.         ...
    3.         dataBinding {
    4.             enabled = true
    5.         }
    6.  }

    2、将现有xml布局转化为databinding布局 

    首先需要配置以上开启databinding功能。然后在布局的中使用快捷键(我的是使用Alt+Enter),该快捷键在第6行之前的任意一处空白处才可调出,很重要!!!

     3、如我的"activity_databind.xml"布局转化成功之后的布局

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     xmlns:app="http://schemas.android.com/apk/res-auto"
    4.     xmlns:tools="http://schemas.android.com/tools">
    5.     <androidx.constraintlayout.widget.ConstraintLayout
    6.         android:layout_width="match_parent"
    7.         android:layout_height="match_parent"
    8.         tools:context=".MainActivity">
    9.         <TextView
    10.             android:id="@+id/text_onclick"
    11.             android:layout_width="wrap_content"
    12.             android:layout_height="wrap_content"
    13.             android:text='@{user.name+@string/mine + user.age}'
    14.             app:layout_constraintBottom_toBottomOf="parent"
    15.             app:layout_constraintLeft_toLeftOf="parent"
    16.             app:layout_constraintRight_toRightOf="parent"
    17.             app:layout_constraintTop_toTopOf="parent" />
    18.     </androidx.constraintlayout.widget.ConstraintLayout>
    19. </layout>

    4、定义一个UserBean数据源

    1. public class UserBean {
    2.     private String name;
    3.     public UserBean(String name, String age) {
    4.         this.name = name;
    5.         this.age = age;
    6.     }
    7.     private String age;
    8.     public String getName() {
    9.         return name;
    10.     }
    11.     public void setName(String name) {
    12.         this.name = name;
    13.     }
    14.     public String getAge() {
    15.         return age;
    16.     }
    17.     public void setAge(String age) {
    18.         this.age = age;
    19.     }
    20. }

    5、activity_databind.xml布局中添加data数据绑定
     

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     xmlns:app="http://schemas.android.com/apk/res-auto"
    4.     xmlns:tools="http://schemas.android.com/tools">
    5.     <data>
    6.         <variable
    7.             name="user"
    8.             type="com.vick.componenttest.databinding.UserBean" />
    9.     </data>
    10.     <androidx.constraintlayout.widget.ConstraintLayout
    11.         android:layout_width="match_parent"
    12.         android:layout_height="match_parent"
    13.         tools:context=".MainActivity">
    14.         <TextView
    15.             android:id="@+id/text_onclick"
    16.             android:layout_width="wrap_content"
    17.             android:layout_height="wrap_content"
    18.             android:text='@{user.name+@string/mine + user.age}'
    19.             app:layout_constraintBottom_toBottomOf="parent"
    20.             app:layout_constraintLeft_toLeftOf="parent"
    21.             app:layout_constraintRight_toRightOf="parent"
    22.             app:layout_constraintTop_toTopOf="parent" />
    23.     </androidx.constraintlayout.widget.ConstraintLayout>
    24. </layout>


    然后布局会自动生成一个xml名称对应的类,如我的是ActivityDatabindBinding

    6、DataBinding将视图与数据源绑定

    1. public class DataBindActivity extends AppCompatActivity {
    2.     @Override
    3.     protected void onCreate(@Nullable Bundle savedInstanceState) {
    4.         super.onCreate(savedInstanceState);
    5. //绑定视图
    6.         ActivityDatabindBinding activityDatabindBinding=DataBindingUtil.setContentView(this, R.layout.activity_databind);
    7.         UserBean userBean = new UserBean("我我我我","30");
    8.         //后续可通过setUser对数据源做修改,视图将同步刷新
    9.         activityDatabindBinding.setUser(userBean);
    10.     }
    11. }

    以上即为DataBinding的一次简单示例,如有帮助,记得点赞~
     

  • 相关阅读:
    CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面4--使用libss7配置7号中继
    1.git基础使用
    创建并启动华为HarmonyOS本地与远程模拟器及远程真机
    【Semi-Supervised Raw-to-Raw Mapping 半监督 Raw-to-Raw 映射】
    【深度学习实验】网络优化与正则化(三):随机梯度下降的改进——Adam算法详解(Adam≈梯度方向优化Momentum+自适应学习率RMSprop)
    cloudenative2-1-go进阶
    subline ts 环境配置
    思腾云计算
    猿创征文|Apache ShenYu网关插件介绍
    【C++深入浅出】C/C++内存管理(教你如何new到对象)
  • 原文地址:https://blog.csdn.net/qq_33539839/article/details/125502193