Android框架组件 DataBinding详解及使用
2020/3/10 23:01:26
本文主要是介绍Android框架组件 DataBinding详解及使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概念
DataBinding
是 Google
在 Jetpack
中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源。使其维护起来更加方便,架构更明确简介。 DataBinding
是 MVVM
模式在 Android
上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM
相对于 MVP,其实就是将 Presenter 层替换成了 ViewModel
层。DataBinding
能够省去我们一直以来的 findViewById()
步骤,大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常
步骤
一、启用DataBinding
- 要将应用配置为使用数据绑定,请在应用模块的
build.gradle
文件中添加dataBinding
元素,如下:
android { ... dataBinding { enabled = true } } 复制代码
二、布局文件的配置
- 在xml布局中使用
<data></data>
标签来描述,在该标签中添加<variable name="data" type="com.example.databinding.MyViewModel"/>
,这里的name
描述了可以在这个布局中使用的属性,type
则表示该属性所属类的详细路径,如下: - data 标签的作用就像一个桥梁搭建了 View 和 Model 之间的通道
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="date" type="com.example.databinding.MyViewModel" /> </data> </layout> 复制代码
- 如果
date
类型要多处用到,也可以直接将之 import 进来,这样就不用每次都指明整个包名路径了,而java.lang.*
包中的类会被自动导入,所以可以直接使用
<data> <import type="com.example.databinding.MyViewModel"/> <variable name="date" type="date"/> </data> 复制代码
- 在布局中,要使用属性则使用
@{}
将其属性及方法写入其中
<!--在标签中使用属性--> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{String.valueOf(date.number)}" app:layout_constraintVertical_bias="0.296" /> 复制代码
<!--在标签中使用方法--> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{()->date.add()}" android:text="Button" /> 复制代码
三、类文件的配置
- 假设我们有一个
ViewModel
类,用其来承载视图的相关数据及方法,如下:
/** * @author iwen大大怪 * @Data 2020/3/7 15:13 */ public class MyViewModel extends ViewModel { private MutableLiveData<Integer> number; public MutableLiveData<Integer> getNumber() { if (number == null){ number = new MutableLiveData<>(); number.setValue(0); } return number; } public void add(){ number.setValue(number.getValue()+1); } } 复制代码
- 开始将数据与视图双向绑定
/** * @author iwen大大怪 * @Data 2020/3/7 14:13 */ public class MainActivity extends AppCompatActivity { MyViewModel myViewModel; // 创建一个binding对象 ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); // 使用binding的DataBindingUtil.setContentView()方法绑定布局 binding = DataBindingUtil.setContentView(this,R.layout.activity_main); // 创建myViewModel对象 myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); //myViewModel = new ViewModelProvider(); // 将具体的值绑定进去,就是将 ViewModel 绑定进去 binding.setDate(myViewModel); // 刷新 binding.setLifecycleOwner(this); } } 复制代码
四、相关代码解释
ActivityMainBinding binding;
系统会为每个布局文件生成一个绑定类。默认情况下,类名称基于布局文件的名称,它会转换为 Pascal 大小写形式并在末尾添加 Binding 后缀。以上布局文件名为 activity_main.xml
,因此生成的对应类为 ActivityMainBinding
。此类包含从布局属性(例如,number
变量)到布局视图的所有绑定,并且知道如何为绑定表达式指定值。
binding.setDate(myViewModel);
这里是为了设置我们在xml
布局中的数据,将其ViewModel
设置在其中,什么date可以直接调用ViewModel
中的属性方法和方法
这篇关于Android框架组件 DataBinding详解及使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路