Jetpack 中的 databinding - 使用篇

什么叫databinding

数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。使用数据绑定可以简化 findViewById 。

如何使用

应用模块下 build.gradle 文件中添加 dataBinding 元素,如下

dataBinding {
        enabled = true
}

单向绑定

activity_list




    

        
    

    

        

        
    

ListActivity

class ListActivity : AppCompatActivity() {

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


        var binding =
            DataBindingUtil.setContentView(this, R.layout.activity_list)
        binding.lifecycleOwner = this

        var userData = UserData()
        userData.age = 10
        userData.userName = "你好"
        binding.user = userData
    }
}

 UserData

class UserData {
    var userName: String? = null
    var age: Int = 0
}

可观察的数据对象

任何 plain-old 对象都可用于数据绑定,但修改对象不会自动使界面更新。通过数据绑定,数据对象可在其数据发生更改时通知其他对象,即监听器,可观察类有三种不同类型:对象、字段和集合。当其中一个可观察数据对象绑定到界面并且该数据对象的属性发生更改时,界面会自动更新。

结合 LiveData 将数据变化通知给界面

ViewModelActivity
class ViewModelActivity : AppCompatActivity() {

    private lateinit var userViewModel: UserViewModel

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

        val binding = DataBindingUtil.setContentView(
            this,
            R.layout.activity_viewmodel
        )
        binding.lifecycleOwner = this

        userViewModel = ViewModelProvider(
            this,
            ViewModelProvider.NewInstanceFactory()
        ).get(UserViewModel::class.java)

        binding.viewModel = userViewModel
    }
}

UserViewModel

class UserViewModel : ViewModel() {

    val userLiveData = MutableLiveData()

    init {
        thread {
            for (x in 1..10) {
                Log.d("TAG", "服务器给你推送消息啦{叮咚声音}$x")
                val userData = UserData()
                //userData.userName.set("接收服务器声音$x")
                userData.userName = "接收服务器声音$x"
                userLiveData.postValue(userData)
                Thread.sleep(2000)
            }
        }
    }
}
class UserData : BaseObservable() {
    val userName: ObservableField by lazy { ObservableField() }
    var age: Int = 0
}



    

        

    

    

        

        
    

你可能感兴趣的:(Jetpack开发工具包,android,kotlin,android-jetpack,databinding)