Android Studio3.5里使用DataBinding,飞起来!

原本不打算写这篇的,可是有点激动,就记录下吧。在studio3.5以前的版本里。使用DataBinding的时候,常常会出现一些莫名其妙的bug。在xml没有代码提示也就忍了。可是有时候连在代码里代码都不提示。忍不了。在看了3.5的优化中,有一点说,只要在xml里写上绑定数据,都不用build,IDE会自动取生成,而后代码提示的问题也不见了,果断从3.2.0升级到了3.5。
惟一要注意的问题是studio3.5格式化布局,布局错乱解决方案php



这里我说下2点经典优势。文章末尾会放出连接。即便不学习不使用MVVM框架。我也以为对android开发之路有很大的帮助。java

1、或许你之后会远离butterKnife 之初识DataBinding

不须要引入任何依赖,只要在你项目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!!");
    }
}
复制代码
  • ActivitySencondBinding 是DataBinding帮你生成的。是按照你的xml文件名+Binding生成。我这里xml:R.layout.activity_sencond
  • DataBindingUtil:也是系统类(想一想,在列表里ViewHolder里使用太爽)
  • 经过binding.txt就得到到控件了。今后拒绝findViewById。或许也会让你远离butterKnife
  • 虽然要写一下绑定的代码。可是你能够把它封装在Base里。统一用ViewDataBinding。这是他们的父类。可是在使用的时候记得强转成你当前的Binding

2、进行数据绑定

对于上面的的代码。咱们能够继续优化。(这里看起来虽然有点脱裤子放屁,可是用到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>
复制代码
  • 加上 data 标签,variable 标签表明要绑定的一个值。name:至关于引用。type:是导入的包。在studio3.5后,有了代码提示
  • 设置数据用@{textStr}。textStr是上面的引用。

那么此时的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

入门到进阶

DataBinding系列

但愿对想要了解这块的兄弟有所帮助。!我的以为。写一行绑定代码,能够帮你的Activity的页面节约多少代码啊!即便你用butterKnife,那也是不少不少。

相关文章
相关标签/搜索