Android DataBinding数据变化时自动更新界面

首先在build.gradle中启用dataBinding:

android{
    ...
    dataBinding {
        enable = true
    }
}

创建ViewMode类

import androidx.databinding.ObservableField

class UserObservable {

    val name: ObservableField by lazy {
        ObservableField()
    }

}

这里注意,变量类型必须是ObservableField<*>,然后*才是具体的类型,不然无法实现数据变化时界面自动刷新(其实直接使用var name: String? = null也可以实现,但这样做的话,别的控件则无法绑定这个值,即无法实现数据变化界面自动更新)。至于后面的by lazy{}是kotlin提供的一个延迟加载机制,这直接创建对象也行,不需要太多关注。

然后编写布局文件,就简单显示一个EditText:



    
        
    
    
        
    

然后是写一个Activity,主要就是一些dataBinding的基本显示界面的代码,唯一的逻辑就是点击空白区域的界面会修改ViewMode对象的数据,然后界面会自动刷新:

import android.app.Activity
import android.os.Bundle
import android.view.View
import androidx.databinding.DataBindingUtil
import com.cc.databingdingtest.databinding.MainBinding

class MainActivity: Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: MainBinding = DataBindingUtil.setContentView(this, R.layout.main)
        val userViewMode = UserObservable()
        userViewMode.name.set("皮皮")
        binding.user = userViewMode
        findViewById(android.R.id.content).setOnClickListener {
            userViewMode.name.set("皮皮今天不想吃饭")
        }
    }

}

完结。

吐槽:不得不说,这方面的资料好少,官网介绍也是一句话概述,而且国内网上大多都是乱复制的,根本就达不到修改ViewMode自动更新界面的效果,于是特意记录以下,希望后来的童鞋们可以快速通关。

你可能感兴趣的:(android,android,studio,gradle)