进入到准备工作之中。。。。。。

1.启用databinding

在主工程app的build.gradle的android {}中加入:

android {    dataBinding {        enabled = true    }    compileSdkVersion 26


2 .配置AndroidManifest

添加基本权限:

android:name="android.permission.INTERNET" />android:name="android.permission.ACCESS_WIFI_STATE" />android:name="android.permission.READ_PHONE_STATE" />android:name="android.permission.ACCESS_NETWORK_STATE" />android:name="android.permission.READ_EXTERNAL_STORAGE" />android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

先创建一个实体类:

public class UserEntity {

    private String username;
    private String nickname;
    private int age;

    public UserEntity() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public UserEntity(String username, String nickname, int age) {
        this.username = username;
        this.nickname = nickname;
        this.age = age;
    }

}

再来看看布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:android="http://schemas.android.com/apk/res/android">

   
                    name="user"
            type="com.study.bin.androidframestudy.mvvm.bean.UserEntity"/>
   


            xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.study.bin.androidframestudy.mvvm.view.MainActivity"
        >

                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.username}"/>

                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{`姓名:`+user.nickname}"/>

                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@{user.age < 30 ? 0xFF0000FF:0xFFFF0000}"
            android:text="@{String.valueOf(user.age)}"/>
   

在data中定义的variable节点,name属性表示变量的名称,type表示这个变量的类型,实例就是我们实体类的位置,当然,这里你也可以换这种方式:

<data>      <import type="org.lenve.databinding1.UserEntity"/>      <variable          name="user"          type="UserEntity"/>  </data> 


先使用import节点将UserEntity导入,然后直接使用即可。但是如果这样的话又会有另外一个问题,假如我有两个类都是UserEntity,这两个UserEntity分属于不同的包中,又该如何?看下面:

<data>      <import type="org.lenve.databinding1.UserEntity" alias="Lenve"/>      <variable          name="user"          type="Lenve"/>  </data>

在import节点中还有一个属性叫做alias,这个属性表示我可以给该类取一个别名,我给UserEntity这个实体类取一个别名叫做Lenve,这样我就可以在variable节点中直接写Lenve了。

在布局文件中,TextView的text属性被我直接设置为了@{user.username},就可以是获取user的username值,
你也可以将它当做String使用,如@{姓名:+user.nickname},
由于TextView的text属性时要字符串的,所以我们需要转型,如@{String.valueOf(user.age)},
获取根据条件进行属性该变,如@{user.age < 30 ? 0xFF0000FF:0xFFFF0000}

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        MvvmLayoutBinding layoutBinding = DataBindingUtil.setContentView(this, R.layout.mvvm_layout);        UserEntity user = new UserEntity();        user.setAge(34);        user.setUsername("binzai");        user.setNickname("彬仔");        layoutBinding.setUser(user);    }}


DataBindingUtil 在support-v4:24版本以上才有,

另外,不知道你测试的时候有木有发现MvvmLayoutBinding这个类居然没有,其实确实是没有这个类,那这个类在哪里呢?

其实这个类名是就是根据这个Activity引用的这个布局文件生成出来的,这个类名就是省略了下划线的布局文件名。

完工。




更多相关文章

  1. Animation
  2. android控件属性
  3. Android(安卓)UI设计系统-android selector 开始自定义样式
  4. Android视图篇之一:Android常见基本布局
  5. Android获取长按按键响应
  6. Android学习笔记之mainfest文件中android属性
  7. 如何减少RadioButton与文字的间距?
  8. 【移动开发】Android中各种xml汇总
  9. Android布局属性详解

随机推荐

  1. android adb 使用初阶
  2. 百度地图android客户端的AndroidMainfest
  3. android最佳实践(四)
  4. Android中数据存储的5种方法
  5. Android 面试题总结之Android 基础(六)
  6. Android负责人:完全开放和一致体验是挑战
  7. Android(安卓)TextView 文字空白解决方案
  8. Android 指纹启动流程
  9. android那些事——android的成长
  10. Android设置铃声分析