Android MVVM快速开发框架(一)_第1张图片



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

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. android控件属性
  2. Android视图篇之一:Android常见基本布局
  3. android界面开发小结——android笔记---控件和布局
  4. android控件属性(中文)
  5. android相对布局中控件的常用属性
  6. android 中targetSdkVersion和与target属性的区别

随机推荐

  1. Android和.NET通用的DES算法
  2. 互联网寒冬下那些 Android(安卓)开发高手
  3. android下基本json串的生成与解析
  4. Java设计模式之Command在Android中的应用
  5. Linux的CPU调速器
  6. Android之获得已安装程序列表
  7. Android精通:View与ViewGroup,LinearLayout
  8. 自动化代码检查优化Lint
  9. Ice Cream Sandwich 已非正式移植于 Nexu
  10. 第二章:Android,Getting start(二)