DataBinding使用指南
来源:互联网 发布:我的世界java.net 编辑:程序博客网 时间:2024/06/15 19:54
一、认识DataBinding
DataBinding,2015年IO大会介绍的一个框架,字面理解即为数据绑定,是Google对MVVM在Android上的一种实现,可以直接绑定数据到xml中,并实现自动刷新。
好处:
去掉大部分UI相关代码(比如findViewById、setOnClickListener、setText等)
xml变成UI的唯一真实来源,数据绑定也直接发生在xml
二、DataBinding使用配置
1.环境要求
AndroidStudio1.3以上
gradle插件1.5以上
2.gradle配置
在android中添加:
dataBinding { enabled = true }
3.在xml布局文件中添加layout标签
<layout> // 原来的layout</layout>
4.Binding自动生成规则
默认生成规则:xml通过文件名生成,使用下划线分割大小写。
比如activity_demo.xml,则会生成ActivityDemoBinding,item_search_hotel则会生成ItemSearchHotelBinding。也可以自定义生成的class名字,在data中指定class:
<data class=“MyClassName”>…</data>
view的生成规则类似,只是由于是类变量,首字母不是大写,比如有一个TextView的id是first_name,则会生成名为firstName的TextView。
使用方法:
1,设置布局文件的值:
Activity中
Employee employee = new Employee("da 神", "Mark 哈哈"); ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.tvFirstName.setText(employee.getFirstname()); binding.tvLastName.setText(employee.getLastname());
2.UI/和事件的绑定
XML布局中
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="employee" type="mooc.com.animtest.Employee"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入First Name"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入 Last Name"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{employee.firstname}" android:textSize="22sp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{employee.lastname}" android:textSize="22sp"/> </LinearLayout></layout>
Activty中代码:
Employee employee = new Employee("安卓da 神", " 哈哈 傻子"); ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setEmployee(employee); }
事件绑定:
android:onClick
android:onLongClick
android:onTextChanged
public class MainActivity extends AppCompatActivity { Employee employee = new Employee("安卓da 神", " 哈哈 傻子"); ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setEmployee(employee); binding.setPresenter(new Presenter()); } public class Presenter { public void onTextChanged(CharSequence s, int start, int before, int count) { employee.setFirstname(s.toString()); binding.setEmployee(employee); } public void onClick(View view) { Toast.makeText(MainActivity.this, "点到了" + view.getId(), Toast.LENGTH_SHORT).show(); } //监听器绑定 public void onClickListenerBinding(Employee employee) { Toast.makeText(MainActivity.this, employee.getLastname(), Toast.LENGTH_SHORT).show(); } }}
xml布局文件
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="employee" type="mooc.com.animtest.Employee"/> <variable name="presenter" type="mooc.com.animtest.MainActivity.Presenter"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入First Name" android:onTextChanged="@{presenter.onTextChanged}"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入 Last Name"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@{presenter.onClick}" android:text="@{employee.firstname}" android:textSize="22sp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@{()->presenter.onClickListenerBinding(employee)}" android:text="@{employee.lastname}" android:textSize="22sp"/> </LinearLayout></layout>
基本原理:
android.binding;
BR
XxxBinding
- DataBinding使用指南
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- databinding
- DataBinding(一)
- DataBinding DropDownList
- DataBinding DropDownList
- WPF DataBinding
- WPF DataBinding
- Spring DataBinding
- Android DataBinding
- 什么样的对象才能作为STL容器的元素
- PhotoShopCS5自学笔记
- C 知识积累
- java 阿里面试常见30道题目汇总
- 5062456.html
- DataBinding使用指南
- Live site management
- JS判断设备类型
- Linux的初步学习
- mvc
- 对象的clone
- (接上)4读取数n,接着写n行数据输出;5输出五角星解析
- 分页查询的实现原理
- Matlab笔记:文件操作相关的常用函数说明