01Databinding基础-Databinding是什么附带

2020-09-09  本文已影响0人  大仙_android

databinding是什么

引用官方文档的一句话

The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically

Data Binding是一个支持库,使用该库,您可以使用声明性格式而非编程方式将布局中的UI组件绑定到应用程序中的数据源

大白话:可以在布局中 写逻辑 /绑定数据源

Databinding helloword

0.开启databinding

android {
    ...
    buildFeatures {
        dataBinding true
    } 
}

不需要其他代码了点击这里 有官方文档 和 demo

The databinding library is bundled with the Android Gradle plugin. You do not need to declare a dependency on the library

绑定库与Android Gradle插件绑定。您不需要声明该库的依赖项

1.最简单的例子 setUser

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    </LinearLayout>
</layout>

注意 layout文件是不带 layout_width 和 layout_height 的 如果 <layout>和 <LinearLayout> 都加了 宽高 则会报错误

AAPT: error: duplicate attribute

AAPT: error: file failed to compile.

记得把<layout>标签宽高删了

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding =
        DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
}

​ 先写layout布局 对应的xml中 有<layout>标签 databinding 才会生成 辅助文件ActivityMainBinding

在代码中使用

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding =
        DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
    binding.apply {
        val user = User("Hello World")
        binding.bean = user
    }
}

2.简单验证

问题:只更改bean中的值 可以达到数据的变更吗?

先说结论 :不可以

btn2.setOnClickListener {
    user.name = "02修改"
}

必须再重新setbean一下

btn1.setOnClickListener {
    bind.bean = user
}

实例代码:github demo01

上一篇 下一篇

猜你喜欢

热点阅读