成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Data Binding

cncoder / 2166人閱讀

摘要:使用數(shù)據(jù)綁定可以在的布局文件中就用對(duì)象指定其顯示的內(nèi)容。由代碼可知,類中所有域均被編入被觀察者列表中,這有時(shí)并不合理。為了靈活起見,可以使用多帶帶對(duì)某個(gè)引用域進(jìn)行轉(zhuǎn)換,使用等對(duì)基本類型進(jìn)行轉(zhuǎn)換。

Data BindingAndroid待發(fā)布的支持庫,它可以將邏輯和代碼關(guān)聯(lián)起來,避免開發(fā)者書寫大量的膠合代碼,也是實(shí)現(xiàn)MVVM架構(gòu)的必要技術(shù)。

此前,布局文件XML被認(rèn)為是相對(duì)靜態(tài)的,往往需要在Java代碼中處理與其有關(guān)的邏輯;數(shù)據(jù)綁定技術(shù)(Data Binding)改造了布局文件使其能夠?qū)隞ava類,定義和使用變量,具備像Java代碼一樣的靈活性,從而使得XML文件變的更加動(dòng)態(tài)化,支持更強(qiáng)大的功能。

添加依賴

在項(xiàng)目頂層的gradle中添加依賴

dependencies {
    classpath "com.android.tools.build:gradle:1.2.3"
    classpath "com.android.databinding:dataBinder:1.0-rc0"
}

在具體模塊gradle配置文件中啟用該插件

apply plugin: "com.android.databinding"
使用示例

給出一個(gè)Model層的User

public class User {
   public final String firstName;
   public final String lastName;
   //get&set
    ....
}

View層使用一個(gè)TextView專門負(fù)責(zé)顯示User的兩個(gè)名字。
在一般的實(shí)現(xiàn)中,TextViewUser類往往都在Activity中實(shí)例化,并實(shí)現(xiàn)交互邏輯。在MVP架構(gòu)中,專門設(shè)立主導(dǎo)器P負(fù)責(zé)交互邏輯,并將User類的實(shí)例化從Activity中移出。
使用數(shù)據(jù)綁定可以在TextView的布局文件中就用User對(duì)象指定其顯示的內(nèi)容。這個(gè)布局文件databinding_layout.xml如下

//1.根標(biāo)簽為 layout


    //2.data標(biāo)簽定義所使用數(shù)據(jù)域?qū)ο?    
        //3.variable標(biāo)簽根據(jù)Java類建立變量
        
    
    //4.靜態(tài)布局
    

        
    

布局文件中定義了數(shù)據(jù)層user和視圖層textview的對(duì)應(yīng)關(guān)系,但要傳入的對(duì)象user還需要在Java代碼中生成;同時(shí)這個(gè)布局文件將按名稱生成一個(gè)DatabindingLayoutBinding類,位于appuildintermediatesclassesdebug<包名>databinding目錄下,需要在Java代碼中作為布局載入;而后將二者綁定起來。

//1.載入新布局類
DatabindingLayoutBinding binding = DataBindingUtil.setContentView(this, R.layout.databinding_layout);
//2.產(chǎn)生User對(duì)象
User user = new User("liu", "xiangtian");
//3.綁定布局和具體對(duì)象
binding.setUser(user);
更多用法

布局文件中data可以像Java代碼一樣導(dǎo)入類,并直接使用其類靜態(tài)變量/方法,使用variable標(biāo)簽聲明和建立對(duì)象;

類和對(duì)象的域/方法均可以在布局文件中使用,也支持相關(guān)運(yùn)算,如上例中的字符連接符+。

觀察者模式

上述僅是數(shù)據(jù)綁定的基本功能,如果User對(duì)象一被改變,布局界面就自動(dòng)更新,數(shù)據(jù)綁定才顯得名副其實(shí)。其實(shí)現(xiàn)很容易讓人聯(lián)想到觀察者模式,User對(duì)象繼承Observable作為被觀察者,但問題是這種實(shí)現(xiàn)更新需要主動(dòng)使用notify函數(shù)來通知觀察者們;為此,android使用BaseObservable類和Bindable注解實(shí)現(xiàn)自動(dòng)通知。

要改的僅僅是User類。

//1.繼承BaseObservable類成為被觀察者
public class User extends BaseObservable{
    public String firstName;

    //2.給get方法Bindable注解
    @Bindable
    public String getFirstName() {
        return firstName;
    }
    //3.給set方法添加`notify`方法
    public void setLastName(String lastName) {
        this.lastName = lastName;
        notifyPropertyChanged(BR.lastName);
    }

}

BR亦是編譯時(shí)生成類,同樣位于appuildintermediatesclassesdebug<包名>目錄下,其內(nèi)容是:

public class BR {
    public static final int _all = 0;
    public static final int firstName = 1;
    public static final int lastName = 2;
    public static final int user = 3;
}

此后當(dāng)使用user.setFirstName("li")更改數(shù)據(jù)后,布局中將相應(yīng)變化。

BR代碼可知,User類中所有域均被編入被觀察者列表中,這有時(shí)并不合理。為了靈活起見,可以使用ObservableFields多帶帶對(duì)某個(gè)引用域進(jìn)行轉(zhuǎn)換,使用ObservableInt等對(duì)基本類型進(jìn)行轉(zhuǎn)換。

依然改User

public class User {
    public ObservableField firstName = new ObservableField<>();
    public ObservableField lastName = new ObservableField<>();
}

在Java代碼中初始化User

User user = new User();
//ObservableField是一個(gè)包裝類,提供get/set方法處理包裝的內(nèi)容對(duì)象
user.firstName.set("liu");
user.lastName.set("xiangtian");

布局文件仍然使用@{user.firstName}即可,不需要使用@{user.firstName.get}

綁定關(guān)系類

生成的新布局文件是一個(gè)代表綁定關(guān)系的類DatabindingLayoutBinding,這個(gè)類繼承自ViewDataBinding,其中包含所有在布局中聲明了的類對(duì)象 和 參與綁定的全部View,并提供了相應(yīng)了set/get方法以及解除所有綁定的unbind方法。如示例中

// views
private final android.widget.LinearLayout mboundView0;
private final android.widget.TextView mboundView1;
// variables
private com.example.migratingtest.User mUser;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/64752.html

相關(guān)文章

  • 新風(fēng)向!成就了Android,熱門框架排第一,你還是不夠了解它!

    摘要:由于長(zhǎng)期苦惱于第三方庫選擇的廣大開發(fā)者而言,這也是谷歌為我們提供的一盞明燈。手機(jī)淘寶構(gòu)架演化實(shí)踐淘寶相信都不陌生了從年開始,從萬增長(zhǎng)到超過億,面臨的問題包括研發(fā)支撐所需要解決的事情各不相同。 ...

    sixgo 評(píng)論0 收藏0
  • 前端框架及庫簡(jiǎn)介

    摘要:是的工具庫,它內(nèi)部封裝了諸多對(duì)字符串?dāng)?shù)組對(duì)象等常見數(shù)據(jù)類型的處理函數(shù),其中部分是目前尚未制訂的規(guī)范,但同時(shí)被業(yè)界所認(rèn)可的輔助函數(shù)。前端框架簡(jiǎn)介是當(dāng)下較為流行的一個(gè)框架,它是以數(shù)據(jù)驅(qū)動(dòng)和組件化的思想構(gòu)建的??蚣苁堑暮诵?,它是一個(gè)實(shí)例。 1、js運(yùn)行機(jī)制 javascript是一門單線程語言同步和異步任務(wù)分別進(jìn)入不同的執(zhí)行場(chǎng)所,同步的進(jìn)入主線程,異步的進(jìn)入Event Table并注冊(cè)函數(shù)。...

    zhangrxiang 評(píng)論0 收藏0
  • cml遷移指南(CML Migrate Guide)

    摘要:今天,為了讓大家的項(xiàng)目?jī)?yōu)雅升級(jí),快速接入,給你帶來一份豐盛的遷移指南目錄結(jié)構(gòu)和微信小程序一樣,包含一個(gè)描述整體程序的和多個(gè)描述各自頁面的。 cml 作為真正讓一套代碼運(yùn)行多端的框架,提供標(biāo)準(zhǔn)的MVVM模式,統(tǒng)一開發(fā)各類終端。 同時(shí),擁有各端獨(dú)立的 運(yùn)行時(shí)框架(runtime)、數(shù)據(jù)管理(store)、組件庫(ui)、接口(api)。 此外,cml在跨端能力加強(qiáng)、能力統(tǒng)一、表現(xiàn)一致等方面...

    FreeZinG 評(píng)論0 收藏0
  • Vue2.x 總結(jié)

    摘要:結(jié)果對(duì)象語法。當(dāng)然,使用并不是首選,只有在構(gòu)建中大型單頁面應(yīng)用時(shí),考慮到全局的狀態(tài)管理,自然就會(huì)想到。頁面路由使用創(chuàng)建單頁面應(yīng)用,就可以使用目前版本是,把組件映射到對(duì)應(yīng)的路由,通過改變來渲染不同的頁面。 Vue2.x 總結(jié) Vue 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架 也意味著,既可以把VUE作為該應(yīng)用的一部分嵌入到一個(gè)現(xiàn)成的服務(wù)端應(yīng)用,或者在前后端分離的應(yīng)用中,利用Vue 的核心庫及其...

    banana_pi 評(píng)論0 收藏0
  • 淺談MVC,MVP,MVVM漸進(jìn)變化及React與Vue比較

    摘要:將注意力集中保持在核心庫,而將其他功能如路由和全局狀態(tài)管理交給相關(guān)的庫。此示例使用類似的語法,稱為。執(zhí)行更快,因?yàn)樗诰幾g為代碼后進(jìn)行了優(yōu)化?;诘哪0迨沟脤⒁延械膽?yīng)用逐步遷移到更為容易。 前言 因?yàn)闆]有明確的界定,這里不討論正確與否,只表達(dá)個(gè)人對(duì)前端MV*架構(gòu)模式理解看法,再比較React和Vue兩種框架不同.寫完之后我知道這文章好水,特別是框架對(duì)比部分都是別人說爛的,而我也是打算把...

    DrizzleX 評(píng)論0 收藏0
  • JavaScript從初級(jí)往高級(jí)走系列————MVVM-Vue

    摘要:原文博客地址如何理解如何實(shí)現(xiàn)是否解讀過的源碼與框架的區(qū)別實(shí)現(xiàn)實(shí)現(xiàn)獨(dú)立初始化實(shí)例兩者的區(qū)別數(shù)據(jù)和視圖的分離,解耦開放封閉原則,對(duì)擴(kuò)展開放,對(duì)修改封閉在中在代碼中操作視圖和數(shù)據(jù),混在一塊了以數(shù)據(jù)驅(qū)動(dòng)視圖,只關(guān)心數(shù)據(jù)變化, 原文博客地址:https://finget.github.io/2018/05/31/mvvm-vue/ MVVM 如何理解 MVVM 如何實(shí)現(xiàn) MVVM 是否解讀過 ...

    codercao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

cncoder

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<