最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?JetPack組件的支持庫Databinding詳解

 更新時(shí)間:2022年08月03日 08:40:51   作者:Cola可洛  
DataBinding是Google發(fā)布的一個(gè)數(shù)據(jù)綁定框架,它能夠讓開發(fā)者減少重復(fù)性非常高的代碼,如findViewById這樣的操作。其核心優(yōu)勢是解決了數(shù)據(jù)分解映射到各個(gè)view的問題,在MVVM框架中,實(shí)現(xiàn)的View和Viewmode的雙向數(shù)據(jù)綁定

簡介

DataBinding 是 Google 在 Jetpack 中推出的一款數(shù)據(jù)綁定的支持庫,利用該庫可以實(shí)現(xiàn)在頁面組件中直接綁定應(yīng)用程序的數(shù)據(jù)源。使其維護(hù)起來更加方便,架構(gòu)更明確簡介。

DataBinding 唯一的作用,也是他的使命,就是綁定數(shù)據(jù),以及所有的支持庫,本質(zhì)上都是為了支持這個(gè)功能。綁定一詞有兩種解釋,第一是將數(shù)據(jù)綁定在 UI 元素;第二是將 UI 上的數(shù)據(jù)綁定到對(duì)應(yīng)的數(shù)據(jù)模型,還支持對(duì)數(shù)據(jù)及 UI 的變動(dòng)觀察,其中一個(gè)發(fā)生變動(dòng)就需要同步到另一個(gè)上去。

啟用databinding

首先設(shè)置使用 Databinding,在 app module 的 build.gradle 中添加如下代碼即可:

android {
    ...
    dataBinding {
        enabled = true
    }
}

布局xml

根結(jié)點(diǎn)必須為<layout>,只能存在一個(gè)<data>和一個(gè)直接子View結(jié)點(diǎn)。

variable (變量標(biāo)簽)

變量的屬性名name不能包含_下劃線,否則再kt文件里會(huì)找不到變量,有時(shí)可能需要指定自定義類型,可以使用 import 語法來導(dǎo)入類,以及使用 alias 設(shè)置別名

    <data>
        <import type="com.example.databinding.Entity.User"/>
        <import type="com.example.databinding.Entity.user.User" alias="member"/>
        <variable
            name="user"
            type="User" />
        <variable
            name="member"
            type="member" />
    </data>

當(dāng)需要使用兩個(gè)同名但不同包名的類,可以使用alias別名屬性

data (數(shù)據(jù)標(biāo)簽)

它有個(gè)屬性class,可以自定義DataBinding生成的類名及路徑

<data class="ObservableDataBinding"> </data>

@{}表達(dá)式

運(yùn)算符

運(yùn)算類型運(yùn)算符
算術(shù)運(yùn)算符+ - / * %
字符串連接運(yùn)算符+
邏輯運(yùn)算符&&
二元運(yùn)算符&
一元運(yùn)算符+ - ! ~
移位運(yùn)算符>> >>> <<
三元運(yùn)算符== > < >= <=
分組運(yùn)算符()

關(guān)鍵字

instanceof

字符、字符串、數(shù)字、null

類型轉(zhuǎn)換

方法調(diào)用

字段訪問

數(shù)組訪問 []

綁定普通數(shù)據(jù)

DataBinding 可以綁定普通數(shù)據(jù)對(duì)象(非 Observable/LiveData)

<data>
        <import type="java.lang.String"/>
        <variable name="content" type="String" />
</data>

綁定可觀察數(shù)據(jù)

綁定可觀察數(shù)據(jù)意味著當(dāng)數(shù)據(jù)變化時(shí) UI 會(huì)跟著一起變化,綁定可觀察數(shù)據(jù)有三種方式:objects、fieldscollections.

對(duì)單個(gè)變量的綁定-fields

對(duì)于一些數(shù)據(jù)類只需要其中幾個(gè)字段支持可觀察,那么可以使用這種方式來創(chuàng)建可觀察數(shù)據(jù)

data class User(
	val name: ObservableField<String>,
    val likes: ObservableInt
)

基本數(shù)據(jù)類型直接使用對(duì)應(yīng)的包裝類

基本數(shù)據(jù)類型包裝類
booleanObservableBoolean
byteObservableByte
charObservableChar
shortObservableShort
intObservableInt
longObservableLong
floatObservableFloat
doubleObservableDouble

引用類型使用帶有泛型參數(shù)的 ObservableField 類來創(chuàng)建

val name: ObservableField<String>

對(duì)集合的綁定-collections

<data>
    <import type="android.databinding.ObservableList"/>
    <variable name="user" type="ObservableList<Object>"/>
</data>
<TextView android:text="@{user[index]}" ... />

可以直接使用 [] 運(yùn)算符( list[0] )獲取對(duì)應(yīng)位置的元素

綁定對(duì)象-objects

需要綁定的數(shù)據(jù)實(shí)體類繼承 BaseObservable

class Person : BaseObservable() {
    @get:Bindable
    var country: String = ""
        set(value) {
            field = value
            notifyPropertyChanged(BR.country)
        }
    @get:Bindable
    var sex: String = ""
        set(value) {
            field = value
            notifyPropertyChanged(BR.sex)
        }
}

需要支持可觀察的數(shù)據(jù)上添加 @get:Bindable 注解,然后重寫 set 方法,在其中調(diào)用 notifyPropertyChanged 方法表示更新該數(shù)據(jù),BR 是自動(dòng)生成的,包名跟當(dāng)前包名一致,會(huì)根據(jù) Bindable 注解的變量生成對(duì)應(yīng)的值;也可以調(diào)用 notifyChange() 方法更新所有數(shù)據(jù)

綁定LiveData

LiveData也支持?jǐn)?shù)據(jù)綁定

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable name="desc"
            type="androidx.lifecycle.MutableLiveData&lt;String>" />
    </data>
...
    <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
           android:layout_gravity="center_vertical"
           android:text="@{desc}" />
</layout>

我們可以直接將 LiveData 賦值給 text,然后綁定數(shù)據(jù)

val desc = MutableLiveData<String>()
binding.desc = desc

雙向綁定

單向綁定是指數(shù)據(jù)變化后更新 UI,而雙向綁定是指其中任意一個(gè)變化后都會(huì)同步更新到另一個(gè)。

雙向綁定使用 @={} 表達(dá)式來實(shí)現(xiàn):

<data>
    ...
        <variable
            name="input"
            type="androidx.databinding.ObservableField&lt;String>" />
    </data>
...
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@={input}"/>

到此這篇關(guān)于Android JetPack組件的支持庫Databinding詳解的文章就介紹到這了,更多相關(guān)Android JetPack組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 高仿微信轉(zhuǎn)賬金錢輸入框規(guī)則

    Android 高仿微信轉(zhuǎn)賬金錢輸入框規(guī)則

    這篇文章主要介紹了Android 高仿微信金錢輸入框規(guī)則的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Android PopupWindow實(shí)現(xiàn)遮罩層效果

    Android PopupWindow實(shí)現(xiàn)遮罩層效果

    這篇文章主要為大家詳細(xì)介紹了Android PopupWindow實(shí)現(xiàn)遮罩層效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Android 使用VideoView播放MP4的簡單實(shí)現(xiàn)

    Android 使用VideoView播放MP4的簡單實(shí)現(xiàn)

    這篇文章主要介紹了Android 使用VideoView播放MP4的簡單實(shí)現(xiàn),實(shí)現(xiàn)簡單的播放功能,播放手機(jī)本地的MP4文件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android Activity切換動(dòng)畫詳解及實(shí)例

    Android Activity切換動(dòng)畫詳解及實(shí)例

    這篇文章主要介紹了Android Activity切換動(dòng)畫overridePendingTransition詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Android Camera2 實(shí)現(xiàn)預(yù)覽功能

    Android Camera2 實(shí)現(xiàn)預(yù)覽功能

    最近在做一些關(guān)于人臉識(shí)別的項(xiàng)目,需要用到 Android 相機(jī)的預(yù)覽功能。今天小編通過本文給大家分享Android Camera2 實(shí)現(xiàn)預(yù)覽功能,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • Android 3.0引入的異步加載機(jī)制Loader

    Android 3.0引入的異步加載機(jī)制Loader

    Loader裝載器從android3.0開始引進(jìn)。它使得在activity或fragment中異步加載數(shù)據(jù)變得簡單。下面我們就來詳細(xì)講解下
    2017-12-12
  • 解析Android開發(fā)中多點(diǎn)觸摸的實(shí)現(xiàn)方法

    解析Android開發(fā)中多點(diǎn)觸摸的實(shí)現(xiàn)方法

    多點(diǎn)觸摸(MultiTouch),指的是允許計(jì)算機(jī)用戶同時(shí)通過多個(gè)手指來控制圖形界面的一種技術(shù)。與多點(diǎn)觸摸技術(shù)相對(duì)應(yīng)的就是單點(diǎn)觸摸,單點(diǎn)觸摸的設(shè)備已經(jīng)有很多年了,小尺寸的有觸摸式的手機(jī),大尺寸的最常見的就是銀行里的ATM機(jī)和排隊(duì)查詢機(jī)等等
    2013-05-05
  • Android開發(fā)歡迎頁點(diǎn)擊跳過倒計(jì)時(shí)進(jìn)入主頁

    Android開發(fā)歡迎頁點(diǎn)擊跳過倒計(jì)時(shí)進(jìn)入主頁

    沒點(diǎn)擊跳過自然進(jìn)入主頁,點(diǎn)擊跳過之后立即進(jìn)入主頁,這個(gè)功能怎么實(shí)現(xiàn)呢,本文通過實(shí)例代碼給大家介紹Android開發(fā)歡迎頁點(diǎn)擊跳過倒計(jì)時(shí)進(jìn)入主頁,感興趣的朋友一起看看吧
    2023-12-12
  • Android內(nèi)核源碼 在Ubuntu上下載,編譯,安裝

    Android內(nèi)核源碼 在Ubuntu上下載,編譯,安裝

    本文主要介紹Android內(nèi)核源碼,想學(xué)習(xí)深入研究Android的朋友肯定要看看Android內(nèi)核知識(shí)的,這里對(duì)下載Android內(nèi)核源代碼的下載,安裝,編譯做了詳細(xì)的介紹,有興趣的小伙伴可以參考下
    2016-08-08
  • Android與H5互調(diào)詳細(xì)介紹

    Android與H5互調(diào)詳細(xì)介紹

    這篇文章主要介紹了Android與H5互調(diào)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

栖霞市| 宁陕县| 龙游县| 绥滨县| 周至县| 博湖县| 秦安县| 酒泉市| 黔东| 陆良县| 苏尼特右旗| 化隆| 西和县| 万山特区| 武夷山市| 连南| 济宁市| 阿坝县| 陆川县| 介休市| 武夷山市| 安乡县| 襄城县| 民权县| 盘山县| 伊川县| 安陆市| 宜州市| 观塘区| 嘉定区| 和政县| 临夏县| 阳高县| 永丰县| 永德县| 沛县| 嘉义县| 玉龙| 台山市| 滨州市| 田东县|