美文网首页
MVVM(一) DataBinding的使用

MVVM(一) DataBinding的使用

作者: 怪兽来啦啦啦啦啦 | 来源:发表于2019-09-28 22:41 被阅读0次

前言

 使用DataBinding能让我们轻松实现MVVM框架设计。它可以直接将数据源绑定在UI组件上,并且自动为我们生成bind,即可直接引用view对象。话不多说,往下看吧。

相关文章阅读
MVVM(二) ViewModel的使用
MVVM(三) 如和实现MVVM?


1 使用前必要操作

 首先在build.gradle(Module:app)文件添加dataBinding,否则无法使用dataBinding,如下所示:

//需要使用到apt
apply plugin: 'kotlin-kapt'
android {
    ...
    dataBinding {
        enabled = true
    }
}

2 布局和绑定表达式

 Databinding 布局使用稍微有点不同,它的文件起始根标签是<layout>,接着在<layout>中是两个同级元素<data>元素和<view>根元素,这个<view>根元素就是我们要显示的视图。一个完整的简单布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
                name="user"
                type="com.example.myapplication.User"/>
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">
        <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.firstName}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>
        <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.lastName}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView2"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

 在data内描述一个可能在布局中使用的user可变参数(variable)

<variable name="user" type="com.example.User" />

 表达式在布局中写入属性参数使用@{}语法。如下面Textview的所示,text设置了user类里的lastName

data class User(val firstName: String, val lastName: String)
<TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.lastName}"/>

3 绑定数据

 写完之后Make Project,Databinding库会为我们生成一个以Layout名字为基础的Binging类。例如:使用activity_main.xml文件Databinding会为我们生成ActivityMainBinding类,类中保存着所有绑定还能为绑定表达式赋值。
 在app运行时,可以将BBBBB显示在界面上。具体代码如下所示:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    binding.user = User("iM", "BBBBB")
}

 你也可以使用LayoutInflater获取view,代码如下所示:

val binding = ActivityMainBinding.inflate(getLayoutInflater())
setContentView(binding.root)

 你还可以在Fragment、或者RecyclerView.Adapter中使用inflate(),代码如下所示:

//ListItemBinding和ActivityMainBinding一样,都是自动生成的
val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
//or
val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)

 以上几步就是DataBinding的简单使用,通过对数据源的绑定,可以直接给视图赋值。


总结

 以上只是简单的DataBinding用法,在实际开发中应当尽量简洁。实际上DataBinding的魅力还不止于此,当你真正了解了双向绑定和DataBinding adapter之后你会写出更简洁的程序。

相关文章

网友评论

      本文标题:MVVM(一) DataBinding的使用

      本文链接:https://www.haomeiwen.com/subject/dmfukctx.html