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

Android基礎(chǔ)入門之dataBinding的簡單使用教程

 更新時間:2022年06月21日 09:52:31   作者:starry陸離  
DataBinding 是谷歌官方發(fā)布的一個框架,顧名思義即為數(shù)據(jù)綁定,下面這篇文章主要給大家介紹了關(guān)于Android基礎(chǔ)入門之dataBinding的簡單使用,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

dataBinding是實(shí)現(xiàn) view 和 data 綁定的工具,把數(shù)據(jù)映射到 view 的 xml中,可以在 xml 布局文件中實(shí)現(xiàn) view 的賦值,方法調(diào)用。使用 DataBinding 后,我們不用再寫 findViewById,不用再獲取控件對象,不用再設(shè)置監(jiān)聽,可以節(jié)省我們 activity 中的很多獲取控件,賦值,添加監(jiān)聽所需要的代碼。

可以說MVP + DataBinding就是MVVC(關(guān)于MVC,MVP,MVVC的區(qū)別可看往期文章)

1.前期準(zhǔn)備

1.1打開dataBinding

image-20220602080856696

1.2修改布局文件

選中布局文件的第一行,按alter+enter就會彈出提示,默認(rèn)選中data binding layout

AndroiddataBinding

image-20220602140306689

改造好的的新的布局文件里最大的變化就是多了一對<data></data>標(biāo)簽;很容易想到這是為了實(shí)現(xiàn)布局文件里數(shù)據(jù)和布局的分離,以及更好的實(shí)現(xiàn)數(shù)據(jù)與視圖的雙向綁定(這里文章后面會慢慢介紹)

image-20220602142624501

1.3修改Activity方法

修改好布局文件之后,還需要對Activity文件做修改

使用了dataBinding之后,編譯器會自動幫我們生成一個類名+Binding的新類,這其實(shí)是編譯器幫我們把布局文件轉(zhuǎn)換成了一個java文件,可以看到我們通過ctrl+鼠標(biāo)左鍵點(diǎn)擊這個類可以直接訪問到布局文件

image-20220602140519092

AndroiddataBinding2

除此之外還需要為mainBinding這個對象賦初值,同樣是通過setContentView方法,不過要傳入兩個參數(shù),前者是Activity類,后者是布局文件的id

mainBinding=DataBindingUtil.setContentView(this,R.layout.activity_main);

image-20220602141039360

image-20220602081156094

2.DataBinding的使用

2.1屬性更新

那么如何使用dataBingding呢?

我們先在布局文件中新建幾個控件,這里我的兩個控件:文本控件的id是textview,按鈕控件的id是button

image-20220602141418203

回到Activity中,我們通過mainBInding對象可以看到,其下有兩個值,textViewbutton,這正是我們剛剛兩個組件的id,所以通過mainBinding對象我們可以輕松的取到我們布局文件里的組件,不再需要findViewById

通過mainBinding獲取到組件同樣的可以設(shè)置這些控件的各種屬性

image-20220602142247143

2.2<data>標(biāo)簽

之前有提到在<data></data>標(biāo)簽中定義數(shù)據(jù)

<androidx.constraintlayout.widget.ConstraintLayout>中定義布局并且綁定數(shù)據(jù),這類似于前端vue框架中的數(shù)據(jù)視圖雙向綁定

2.2.1簡單數(shù)據(jù)的定義與綁定

那么如何在data標(biāo)簽中定義數(shù)據(jù)呢?

通過標(biāo)簽,定義數(shù)據(jù)的名字name和類型type,這個類型可以是java中的所有基本類型

image-20220602144940501

然后到布局中,用插值表達(dá)式將數(shù)據(jù)替代掉

image-20220602145243458

不過現(xiàn)在什么也不會顯示,因?yàn)檫@兩個變量只定義了,沒有賦值

image-20220602145419501

看到這,我們也明白data標(biāo)簽的好處之一了,數(shù)據(jù)的定義都在data標(biāo)簽中,而constraint中就只管布局,通過插值表達(dá)式來綁定數(shù)據(jù),不會出現(xiàn)數(shù)據(jù)。

那么data標(biāo)簽里的數(shù)據(jù)又如何初始化賦值呢?

這部分邏輯操作就交給Activity了。每定義一個varible,在布局的Binding類中都會生成此變量的get和set方法,通過這兩個方法我們對數(shù)據(jù)進(jìn)行初始化和更新。

image-20220602145847676

image-20220602150141004

所以有了dataBinding我們極大的減輕了Activity所要做的操作,Activity可以更專注于對數(shù)據(jù)與邏輯的處理,而UI的獲取與數(shù)據(jù)和UI的綁定都交給了布局文件。

2.2.2復(fù)雜數(shù)據(jù)的定義與綁定

我們嘗試一下類類型的數(shù)據(jù)的定義與綁定

先定義一個簡單的實(shí)體類,簡單的寫兩個屬性

image-20220602150900388

在data中定義一個類變量,name屬性的同樣是這個變量的名字,type屬性就是這個包名.類名

image-20220602151129993

數(shù)據(jù)的綁定也是一樣的,通過類變量的名字.屬性,所以我們可以把類變量person看成Person類new 出來的一個對象

image-20220602151424656

回到Activity中對類變量進(jìn)行初始化,運(yùn)行可以看到UI上的數(shù)據(jù)已經(jīng)更新了

image-20220602152029525

2.3事件綁定

dataBinding可以把事件以數(shù)據(jù)的形式綁定到布局文件中

2.3.1點(diǎn)擊事件綁定

首先我們在Activity中定義一個內(nèi)部類

image-20220602152649237

然后在data標(biāo)簽中定義這個內(nèi)部類的變量

image-20220602152748209

通過onClick屬性實(shí)現(xiàn)事件的綁定,值得注意的是myclick.onClick方法后沒有括號;這樣簡單的幾行代碼就實(shí)現(xiàn)了事件的綁定。用戶每點(diǎn)擊一次按鈕都會調(diào)用MyClick類中的onClick()方法

 android:onClick="@{myclick.onClick}"

image-20220602152950737

而Activity只需要做的事情就是初始化這個點(diǎn)擊事件。因?yàn)榇藭r事件已經(jīng)被當(dāng)成數(shù)據(jù)在使用了,通過set方法設(shè)置Myclick的值即可。然后打印日志查看運(yùn)行效果

mainBinding.setMyclick(new MyClick());

image-20220602153418460

可以看到每點(diǎn)擊一次按鈕都會打印一次日志,說明調(diào)用成功

image-20220602153650965

2.3.2點(diǎn)擊事件回傳數(shù)據(jù)

我們看到onClick()方法中,我們傳入的是view參數(shù),那可以傳其他參數(shù)嗎?

public class MyClick{
        public void onClick(View view){
            Log.i("myclick", "onClick: 點(diǎn)贊成功!");
        }
    }

當(dāng)然是可以的而且我們是通過這一種方法事件點(diǎn)擊回傳數(shù)據(jù)。如我們把Person作為參數(shù)傳入,并綁定點(diǎn)擊事件,那么用戶點(diǎn)擊按鈕,又可以將數(shù)據(jù)傳回到Activity中。

改造一下onClick()方法,傳入?yún)?shù)改為Person

image-20220602155027810

并在布局文件中重新綁定,這里綁定事件也有點(diǎn)不同了,需要用到lambda表達(dá)式

android:onClick="@{()->myclick.onClick(person)}"

image-20220602155110852

點(diǎn)擊按鈕,可以看到把person中的數(shù)據(jù)傳了回來;

image-20220602154925534

2.3.3動態(tài)改變對象數(shù)據(jù)在控件上顯示

默認(rèn)情況下,在點(diǎn)擊事件監(jiān)聽方法中修改person對象的值并不會修改數(shù)據(jù)在控件上的顯示

image-20220604205309233

如果我們要實(shí)現(xiàn)事件監(jiān)聽動態(tài)去改變控件上的數(shù)據(jù)的話,我們需要對Person類動一動手腳

讓Person類繼承BaseObservable類,并為每個屬性生成get和set方法

image-20220604205729905

在點(diǎn)擊事件監(jiān)聽方法中通過調(diào)用set方法設(shè)置新的值,來修改person對象的值并在控件上的顯示

AndroiddataBinding3

2.3.4動態(tài)改變基本數(shù)據(jù)在控件上顯示

首先在Activity中定義一個name變量,不過需要使用ObservableField類包裝

image-20220604212240287

其后在data標(biāo)簽中定義一個name變量,并將其綁定在一個新的文本控件上。

這里值得注意的是在<>符號里不能再出現(xiàn)<>,所以我們使用轉(zhuǎn)義符&lt;&gt;

image-20220604212453661

最后在單擊事件方法中更新name的值,這個值就會動態(tài)的更新在界面上

image-20220604212559085

AndroiddataBinding4

2.4與輸入控件結(jié)合

首先在界面中添加一個新的輸入控件,并為其綁定一個變量,這里我就綁定name變量。那么我們剛剛把name變量綁定在一個文本控件上,現(xiàn)在又把name綁定在一個輸入控件上。那么我們在輸入控件中對name變量的改變會及時更新顯示在文本控件上嗎?

image-20220604213107804

image-20220604213200235

當(dāng)然是可以的不夠我們的數(shù)據(jù)綁定要做一個小小的修改,僅僅添加了一個等于符號,那這個實(shí)時輸入顯示的功能就實(shí)現(xiàn)啦?。?!

 android:text="@={name}"

image-20220604213625115

動圖看一下效果

AndroiddataBinding5

2.5與圖片控件結(jié)合

通過dataBinding和imageView和Glide的結(jié)合使用,可以很方便的加載一張網(wǎng)絡(luò)圖片

第一步我們還是先在布局文件中添加一個圖片控件

image-20220604214416733

然后添加Glide依賴和網(wǎng)絡(luò)請求權(quán)限

  //引入第三方庫glide
    implementation 'com.github.bumptech.glide:glide:4.13.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

image-20220604214727257

然后再Activity中創(chuàng)建一個靜態(tài)的公共的方法,傳入imageView和網(wǎng)絡(luò)圖片的url兩個參數(shù);并為其添加一個注解BindingAdapter()

@BindingAdapter("imageUrl")
    public static void bindImageUrl(ImageView view,String url){
        Glide.with(view)
                .load(url)
                .into(view);
    }

image-20220604215109425

然后在布局文件中就出現(xiàn)了一個imageUrl的屬性,通過這個屬性我們?yōu)槲覀兊膱D片組件動態(tài)的添加網(wǎng)絡(luò)圖片。這里為了方便我還是綁定@{name},在Activity中將name初始化為一個圖片的url

image-20220604215312934

image-20220604215823875

image-20220604215844620

這其實(shí)是我們為控件自定義了一個屬性,名字叫imageUrl,(其實(shí)就是注解里的那個參數(shù),你取這個自定義的屬性叫什么它就叫什么)

總結(jié)

到此這篇關(guān)于Android基礎(chǔ)入門之dataBinding的簡單使用的文章就介紹到這了,更多相關(guān)Android dataBinding使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • android 布局之ConstraintLayout的使用

    android 布局之ConstraintLayout的使用

    這篇文章主要介紹了android 布局之ConstraintLayout的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • android系統(tǒng)在靜音模式下關(guān)閉camera拍照聲音的方法

    android系統(tǒng)在靜音模式下關(guān)閉camera拍照聲音的方法

    本文為大家詳細(xì)介紹下android系統(tǒng)如何在靜音模式下關(guān)閉camera拍照聲音,具體的實(shí)現(xiàn)方法如下,感興趣的朋友可以參考下哈
    2013-07-07
  • Android開發(fā)之如何自定義數(shù)字鍵盤詳解

    Android開發(fā)之如何自定義數(shù)字鍵盤詳解

    這篇文章主要給大家介紹了關(guān)于Android開發(fā)之如何自定義數(shù)字鍵盤的相關(guān)資料,本文語言是基于kotlin實(shí)現(xiàn)的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Android Studio實(shí)現(xiàn)井字游戲

    Android Studio實(shí)現(xiàn)井字游戲

    這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)井字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Android實(shí)現(xiàn)文字滾動效果

    Android實(shí)現(xiàn)文字滾動效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)文字滾動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android Studio常用快捷鍵功能說明

    Android Studio常用快捷鍵功能說明

    本文給大家收藏整理了關(guān)于Android Studio常用快捷鍵功能說明,需要的朋友可以參考下
    2017-10-10
  • Android實(shí)現(xiàn)中國象棋游戲(局域網(wǎng)版)

    Android實(shí)現(xiàn)中國象棋游戲(局域網(wǎng)版)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)局域網(wǎng)版的中國象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 手機(jī)方向傳感器的缺點(diǎn)及解決方法探究

    手機(jī)方向傳感器的缺點(diǎn)及解決方法探究

    今天小編就為大家分享一篇關(guān)于手機(jī)方向傳感器的缺點(diǎn)及解決方法探究,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 仿Iphone中搜索結(jié)果的布局詳解

    仿Iphone中搜索結(jié)果的布局詳解

    本篇文章是對仿Iphone中搜索結(jié)果的布局進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android WebView基礎(chǔ)應(yīng)用詳解

    Android WebView基礎(chǔ)應(yīng)用詳解

    這篇文章主要為大家介紹了Android中WebView這一控件的基礎(chǔ)應(yīng)用,例如:播放音樂,播放視頻等,文中的示例代碼講解詳細(xì),對于我們了解WebView很有幫助,需要的同學(xué)可以學(xué)習(xí)一下
    2021-12-12

最新評論

沂南县| 讷河市| 晋宁县| 塘沽区| 商城县| 安多县| 兰西县| 贵定县| 马鞍山市| 楚雄市| 北安市| 含山县| 望谟县| 西青区| 渭源县| 福泉市| 靖州| 新野县| 西昌市| 南陵县| 昌黎县| 三江| 巴彦淖尔市| 永川市| 钦州市| 临湘市| 游戏| 花莲县| 柳江县| 枝江市| 岱山县| 芷江| 定结县| 佳木斯市| 华亭县| 南陵县| 邮箱| 天柱县| 敦化市| 亳州市| 巴林左旗|