没写过kotlin项目,万事开头难。不知道如何下手,看了别人的项目,太大了,还是先熟悉一下基本的知识吧。今天看看jetpack的Databinding。
1.什么是jetpack
先看看google关于jetpack的解释:
jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作. 嗯,大概看了个寂寞,还是不清楚到底是做什么的,继续深入了解吧,百度会教会你所不知道的。
从这张图我们可以知道jetpack ,主要分成4部分,今天主要学习下DataBinding.
1.什么是DataBinding
见名知其意,字面意思就是数据绑定,API解释就是:数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
特点:
- 替代findviewByid,以后都不用写了,
- 解耦合,降低布局和逻辑的耦合性,使项目维护起来更简单、方便。还可以提高应用性能,
- 有助于防止内存泄漏以及避免发生 Null 指针异常。
3,怎么使用DataBinding
数据绑定库与 Android Gradle 插件捆绑在一起。您无需声明对此库的依赖项,但必须启用它。
如需启用数据绑定,请在模块的 build.gradle
文件中将 dataBinding
构建选项设置为 true
在app>buid.gradle文件下增加以下代码
android {
...
buildFeatures {
dataBinding true
}
}
新建了一个LoginActivity,修改actvity_login.xml代码,增加<layout></layout>模块
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="user"
type="com.tz.test.ui.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingTop="84dp"
android:paddingRight="15dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_logo" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="60dp"
android:paddingTop="14dp">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:hint="请输入手机号码"
android:text='@{user.phone}' />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@color/c_FFEEEEEE" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:paddingTop="14dp">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:hint="请输入验证码"
android:text='@{user.inputCode}' />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@color/c_FFEEEEEE" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="45dp"
android:background="@drawable/shape_login_btn"
android:text="登录"
android:textColor="@color/white" />
</LinearLayout>
</layout>
新建了一个javaBean,用于展示用户手机号和输入的验证码
class User(val phone: String, val inputCode: String) {
}
系统会为每个布局文件生成一个绑定类。默认情况下,类名称基于布局文件的名称,重新选择Make Project,系统会自动生成,ActivityLoginBinding。
4, DataBindingUtil.setContentView替代setContentView
val bind=DataBindingUtil.setContentView<ActivityLoginBinding>(this, R.layout.activity_login)
bind.user= User(phone = "1234555",inputCode = "888888")