沒寫過kotlin項(xiàng)目,萬事開頭難破婆。不知道如何下手劳闹,看了別人的項(xiàng)目,太大了耘戚,還是先熟悉一下基本的知識(shí)吧嗡髓。今天看看jetpack的Databinding。
1.什么是jetpack
先看看google關(guān)于jetpack的解釋:
jetpack 是一個(gè)由多個(gè)庫組成的套件收津,可幫助開發(fā)者遵循最佳做法饿这、減少樣板代碼并編寫可在各種 Android 版本和設(shè)備中一致運(yùn)行的代碼,讓開發(fā)者可將精力集中于真正重要的編碼工作. 嗯撞秋,大概看了個(gè)寂寞长捧,還是不清楚到底是做什么的,繼續(xù)深入了解吧,百度會(huì)教會(huì)你所不知道的吻贿。
從這張圖我們可以知道jetpack ,主要分成4部分唆姐,今天主要學(xué)習(xí)下DataBinding.
1.什么是DataBinding
見名知其意,字面意思就是數(shù)據(jù)綁定廓八,API解釋就是:數(shù)據(jù)綁定庫是一種支持庫,借助該庫赵抢,您可以使用聲明性格式(而非程序化地)將布局中的界面組件綁定到應(yīng)用中的數(shù)據(jù)源剧蹂。
特點(diǎn):
- 替代findviewByid,以后都不用寫了,
- 解耦合烦却,降低布局和邏輯的耦合性宠叼,使項(xiàng)目維護(hù)起來更簡(jiǎn)單、方便其爵。還可以提高應(yīng)用性能冒冬,
- 有助于防止內(nèi)存泄漏以及避免發(fā)生 Null 指針異常。
3摩渺,怎么使用DataBinding
數(shù)據(jù)綁定庫與 Android Gradle 插件捆綁在一起简烤。您無需聲明對(duì)此庫的依賴項(xiàng),但必須啟用它摇幻。
如需啟用數(shù)據(jù)綁定横侦,請(qǐng)?jiān)谀K的 build.gradle
文件中將 dataBinding
構(gòu)建選項(xiàng)設(shè)置為 true
在app>buid.gradle文件下增加以下代碼
android {
...
buildFeatures {
dataBinding true
}
}
新建了一個(gè)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="請(qǐng)輸入手機(jī)號(hào)碼"
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="請(qǐng)輸入驗(yàn)證碼"
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>
新建了一個(gè)javaBean绰姻,用于展示用戶手機(jī)號(hào)和輸入的驗(yàn)證碼
class User(val phone: String, val inputCode: String) {
}
系統(tǒng)會(huì)為每個(gè)布局文件生成一個(gè)綁定類枉侧。默認(rèn)情況下,類名稱基于布局文件的名稱狂芋,重新選擇Make Project,系統(tǒng)會(huì)自動(dòng)生成榨馁,ActivityLoginBinding。
4帜矾, DataBindingUtil.setContentView替代setContentView
val bind=DataBindingUtil.setContentView<ActivityLoginBinding>(this, R.layout.activity_login)
bind.user= User(phone = "1234555",inputCode = "888888")