原本不打算写这篇的,可是有点激动,就记录下吧。在studio3.5以前的版本里。使用DataBinding的时候,常常会出现一些莫名其妙的bug。在xml没有代码提示也就忍了。可是有时候连在代码里代码都不提示。忍不了。在看了3.5的优化中,有一点说,只要在xml里写上绑定数据,都不用build,IDE会自动取生成,而后代码提示的问题也不见了,果断从3.2.0升级到了3.5。
惟一要注意的问题是studio3.5格式化布局,布局错乱解决方案php
这里我说下2点经典优势。文章末尾会放出连接。即便不学习不使用MVVM框架。我也以为对android开发之路有很大的帮助。java
不须要引入任何依赖,只要在你项目build.gradle的android标签上,加上:android
dataBinding {
enabled = true
}
复制代码
而后布局最外层用layout包裹。像这样。框架
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RelativeLayout>
</layout>
复制代码
而后在Activity里只要进行数据绑定下。就可使用了ide
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
binding.txt.setText("Hello Girl!!");
}
}
复制代码
对于上面的的代码。咱们能够继续优化。(这里看起来虽然有点脱裤子放屁,可是用到MVVM里确是能够实现数据和xml的双向绑定) 咱们把Activity的布局改为这样布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="textStr" type="String" />
</data>
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{textStr}" />
</RelativeLayout>
</layout>
复制代码
那么此时的Activity里的代码是:学习
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
binding.setTextStr("Hello Girl!!");
}
}
复制代码
这里就算是数据绑定了。若是是要设置点击事件直接在加个绑定值data标签上加上:gradle
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
...//省略代码便于理解
<variable name="onClickListener" type="android.view.View.OnClickListener" />
</data>
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{textStr}" android:onClick="@{onClickListener}" />
</RelativeLayout>
</layout>
复制代码
Activity里固然是要把这个onClickListener设置进去了,Activity实现View.OnClickListener接口以下:优化
public class SecondActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
binding.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "就是这样", Toast.LENGTH_SHORT).show();
}
}
复制代码
网上已经有不少讲的很详细了这里放2个连接:ui
但愿对想要了解这块的兄弟有所帮助。!我的以为。写一行绑定代码,能够帮你的Activity的页面节约多少代码啊!即便你用butterKnife,那也是不少不少。