初体验——DataBinding (一)

来源:互联网 发布:丽得姿和美迪惠尔 知乎 编辑:程序博客网 时间:2024/06/05 10:56

我达到目标的惟一的力量就是我的坚持精神。只要持之以恒,知识丰富了,终能发现其奥秘。

谨以此名言激励自己,坚持写博客,不积跬步,无以至千里!

DataBinding概念:

DataBinding 只是android提供的一个支持库,支持API7以上的所有版本,目的是简化布局,减少绑定应用程序逻辑,避免一遍又一遍的findViewById( )。

DataBinding是一个support library,所以它可以支持所有的android sdk,最低可以到android2.1(API7)。使用DataBinding需要Android Gradle插件的支持,版本至少在1.5以上,需要的Android studio的版本在1.3以上
(本人使用 Android studio版本3.0。)
dependencies {    classpath 'com.android.tools.build:gradle:3.0.0-rc2'    // NOTE: Do not place your application dependencies here; they belong    // in the individual module build.gradle files}
使用DataBinding之前准备工作是配置。

在模块的build.gradle文件中配置一句话即可,表示dataBinding可用。

dataBinding {    enabled = true}
简易小demo上场——

使用dataBinding目的就是为了简化,先从布局开始,通常写一个线性布局即可,但是dataBinding有种特殊写法,布局的外层多了一层<layout></layout>,而<layout></layout>中,定义了一层<data></data>,就是这层逻辑,是dataBinding的关键,定义一个变量<variable />,其中包含2个属性值,name和type,名称和类型,type由包名+类名组成,name以我的理解就是一个数据对象PerOne,这个对象有几个属性值,Perone.info,Perone.firstName,PerOne.lastName;当然这个对象的名称可自定义,只要符合明明规则,怎么定义看你的心情。

<layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <variable name="PerOne" type="com.example.mytry.User"/>    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <Button            android:id="@+id/bdd"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{PerOne.info}" />        <TextView            android:id="@+id/textView"            android:layout_width="105dp"            android:layout_height="wrap_content"            android:text="@{PerOne.firstName}" />        <TextView            android:id="@+id/textView2"            android:layout_width="96dp"            android:layout_height="wrap_content"            android:text="@{PerOne.lastName}" />    </LinearLayout></layout>


布局文件定义好之后,就是使用问题了,这里setContentView()就不再需要了,我们使用同一个布局文件,只是这个布局文件是dataBinding支持的,DataBindingUtil.setContentView( ) 来加载布局文件。

package com.example.mytry;import android.app.Activity;import android.databinding.DataBindingUtil;import android.os.Bundle;import com.example.mytry.databinding.ActivityMainBinding;public class MainActivity extends Activity {    private static final String TAG = MainActivity.class.getSimpleName();    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);        User user = new User("张丽丽", "", "是一名学生");        binding.setPerOne(user);    }}

默认情况下,将根据布局文件的名称生成一个Binding类,将其转换为Pascal格式并将“Binding”后缀添加到该文件中。上面的布局文件是activity_main.xml这样的生成类是ActivityMainBinding。bingding.setPerOne(user);

可能有人疑问,setPerOne()方法来自与那里,参考上一代码片,name="PerOne",即set"name",呵呵,是不是很容易。

<data>        <variable name="PerOne" type="com.example.mytry.User"/></data>


通常情况下。view不只是显示到界面,是能够和用户交互并且可以响应用户的点击事件。那么就涉及事件的处理。有点类似viewHolder。

DataBinding的部分知识小点

<data>    <import type="android.view.View"/>   <variable       name="user"       type="com.example.mytry.User"/>    <variable        name="presenter"        type="com.example.mytry.Presenter"/></data>

<TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@{user.firstName}"
    android:onClick="@{()->presenter.onClickText(View)}"    android:visibility="@{user.adult?View.VISIBLE:View.GONE}"/>
根据user的adult属性设置控件的显示和隐藏。onClick设置点击事件等。




当然还有命名重复的时候,此时采用的是alias别名以示区分。

<import type="android.view.View"/><import type="com.example.real.estate.View"        alias="Vista"/>

当然还有一些情况,官方api指南上竟没有讲,被我神奇地发现(可能已经包含里面了,针对我这种懒人),

<layout></layout> 可以不用任何<data></data>,就可以替换所有的findViewById(),哈哈,这个更简单了,完全跑得通!!!






原创粉丝点击