一。使用限制条件:
【1】最低兼容到android 2.1 (API level 7+).
【2】Gradle至少是1.5以上
二。databinding主要是用来提高开发效率,初步使用特点是祛除了大量的findviewbyid。完全隔离view和业务逻辑
三。怎么使用,首先在 module的gradle文件中配置如下代码
dataBinding{
enabled=true
}
然后是在activity后者fragment的最外层布局套上layout标签,示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.minwenping.databindingdemo.MainActivity">
<TextView
android:id="@+id/tv_Test"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="@string/app_name" />
<Button
android:id="@+id/btn_TestButton"
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="测试databindingDemo" />
</LinearLayout>
</layout>
activity中的代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
//contentview都绑定这里
ActivityMainBinding activityDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityDataBinding.btnTestButton.setText("成功修改了button的值");
activityDataBinding.tvTest.setText("databinding祛除findviewbyId陈功");
}
}
运行效果如图
使用总结:在activity中完全不用findviewbyid。
第二部分绑定数据
/**
* 测试bean类
* Created by Administrator on 2017/7/29.
*/
public class TestBean {
String tvText;
String btnText;
public TestBean(String tvText, String btnText) {
this.tvText = tvText;
this.btnText = btnText;
}
}
//布局绑定数据
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="testBean"
type="com.example.minwenping.databindingdemo.TestBean"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.minwenping.databindingdemo.MainActivity">
<TextView
android:id="@+id/tv_Test"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="@{testBean.tvText}"
/>
<Button
android:id="@+id/btn_TestButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="16dp"
android:text="@{testBean.btnText}" />
</LinearLayout>
</layout>
//activity的代码
public class MainActivity extends AppCompatActivity {
TestBean bean=new TestBean("text新数据","buttonXinshuju");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
//contentview都绑定这里
ActivityMainBinding activityDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityDataBinding.btnTestButton.setText("成功修改了button的值");
activityDataBinding.tvTest.setText("databinding祛除findviewbyId陈功");
activityDataBinding.setTestBean(bean);
//第二种写法
// activityDataBinding.setVariable(BR.testBean,bean);
}
}
最后是运行结果如图:
给布局绑定数据的时候坑如下:
1.bean类中一定有get和set方法,不然xml编辑@{testBean.field}有问题
2.绑定数据后,activityDataBinding.btnTestButton.setText("成功修改了button的值");
刷新数据和绑定数据顺序有关系,谁先执行谁先显示
activityDataBinding.tvTest.setText("databinding祛除findviewbyId陈功");
activityDataBinding.setTestBean(bean);