zoukankan      html  css  js  c++  java
  • android -------- Data Binding的使用(一)

    Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用

    面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助

    描述:

    Data Binding 是把数据直接绑定到 XML 文件上,并能实现自动刷新。

    Data Binding 减少了代码的耦合性,一些如 findViewById、setText 之类的操作都可以通过绑定实现。

    Data Binding 是MVVM模式开发的

    Google 官方文档:https://developer.android.google.cn/reference/android/databinding/package-summary

    配置:

    环境要求:

    1. 系统版本:Android 2.1(API level 7)及以上

    2. Gradle版本:1.5.0-alpha1及以上

    3. Android Studio版本:1.3及以上

    在app根目录的build.gradle文件中加入Data Binding配置:

    android {
    compileSdkVersion 22
    buildToolsVersion "27.0.3"

    dataBinding {
    enabled = true
    }
    .....
    }

    简单的一个案例 :布局中绑定数据

    先写一个实体类

    public class Employee {
    
        public Employee(String frstName,String lastName){
            this.frstName = frstName;
            this.lastName = lastName;
        }
    
        private String frstName;
    
        private String lastName;
    
        public String getFrstName() {
            return frstName;
        }
    
        public void setFrstName(String frstName) {
            this.frstName = frstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    }

    布局文件 activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:bind="http://schemas.android.com/apk/res-auto">
        
        <data>
            <variable
                name="employee"
                type="com.zhangqie.databinding.demo1.Employee"/><!-- 实体类的地址 -->
        </data>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
    
            <TextView
                android:id="@+id/tv_name1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    
            <TextView
                android:id="@+id/tv_name2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                 />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{employee.frstName}"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{employee.lastName}"
                />
        </LinearLayout>
    </layout>

    由上面可看出

    我们在最外层再套一层 标签layout,里面包含了 data标签和LinearLayout标签

    data 标签下面的 variable 定义数据绑定用的实体类

    type 里面是完整的带包名的类,
    name 自定义一个名称,下面具体绑定的时候就是用的这个名称。

    layout标签的定义会默认生成一个数据绑定类 (类名根据文件的名称来生成)

    编译一下我就会生成了一个 ActivityMainBinding的类了

    之后MainActivity中

    public class MainActivity extends AppCompatActivity {
    
        Employee employee = new Employee("切切歆语","小张");
    
    
        ActivityMainBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           // setContentView(R.layout.activity_main);
    
            binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    
            //直接访问Id 设置属性
            binding.tvName1.setText("小张");
            binding.tvName2.setText("歆语");
    
            //传对象绑定数据
            //两种方式一样
            binding.setEmployee(employee);
            //binding.setVariable(com.zhangqie.databinding.BR.employee,employee);
    
        }
    }

    这样看起来是不是方便了很多呢

    运行效果:

                  

    特点:

    MVVM 的实现

    提高开发效率

    性能高 ,功能强

    上面是Data Binding的基本用法,当然还有其它很多的高级用法,更新中...

  • 相关阅读:
    POJ_1456 Supermarket 【并查集/贪心】
    CSS before和after伪类
    CSS anchor专为链接属性选择器
    CSS 属性选择器
    CSS float浮动
    CSS 外边距和内填充
    CSS 边框属性
    CSS 背景
    CSS 组和选择器
    CSS 引入方式
  • 原文地址:https://www.cnblogs.com/zhangqie/p/9329350.html
Copyright © 2011-2022 走看看