中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

建設(shè)一個怎樣的自己的網(wǎng)站濟(jì)南競價托管公司

建設(shè)一個怎樣的自己的網(wǎng)站,濟(jì)南競價托管公司,貴陽住房和城鄉(xiāng)建設(shè)局網(wǎng)站,婚慶網(wǎng)站開發(fā)工具一、簡介 在Vue中使用的是MVVM架構(gòu)。通過ViewModel可以實(shí)現(xiàn)M層和V層數(shù)據(jù)的雙向綁定。Model層的數(shù)據(jù)發(fā)生變化后,會自動更新View層UI。UI層數(shù)據(jù)發(fā)生變化(用戶輸入),可以驅(qū)動Model層的數(shù)據(jù)發(fā)生變化,借助于Vue框架中的View…

一、簡介

? ? ? ?在Vue中使用的是MVVM架構(gòu)。通過ViewModel可以實(shí)現(xiàn)M層和V層數(shù)據(jù)的雙向綁定。Model層的數(shù)據(jù)發(fā)生變化后,會自動更新View層UI。UI層數(shù)據(jù)發(fā)生變化(用戶輸入),可以驅(qū)動Model層的數(shù)據(jù)發(fā)生變化,借助于Vue框架中的ViewModel實(shí)現(xiàn)數(shù)據(jù)和UI的雙向驅(qū)動。

? ? 在Android中也想實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,怎么辦呢?

? JetPack中的DataBinding就充當(dāng)了ViewModel的角色,用來實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。

Android app的開發(fā)架構(gòu)從最開始的MVC到MVP,到MVVM,進(jìn)一步的解耦。

在Vue中,開發(fā)者只需維護(hù)數(shù)據(jù)的變化就行,數(shù)據(jù)變化后,會自動刷新UI,大大提示了開發(fā)效率。

Android層面實(shí)現(xiàn)MVVM,要比在Vue中復(fù)雜些,需要做的準(zhǔn)備工作很多。

在Android中使用DataBinding后,不需要再寫findVIewById方法,也不需要調(diào)用VIew的setText,

這也就實(shí)現(xiàn)了Model層和VIew層的解耦,在Vue中也不需要手動操作dom來更新UI。

二、DataBinding在Android中的應(yīng)用。

? ? 1.app項(xiàng)目中開啟DataBinding支持,默認(rèn)是關(guān)閉的。

? ? ? ? ?builder.gradle ---android節(jié)點(diǎn)下配置?

 dataBinding {enabled true}

? ? 2.編寫model層代碼JavaBean

? ? ? 和編寫普通JavaBean,除了寫get、set方法外有以下不同。

? ? ? ?1)定義的JavaBean需要繼承BaseObservable 類

? ? ? ?2)在get方法上添加注解@Bindable,DataBinding需要通過注解來解析定義的方法。

? ? ? ?3)在set方法中添加對應(yīng)的方法?,

? ? ? ? ? ? ?notifyPropertyChanged(BR.age);?notifyPropertyChanged(BR.name);

public class User extends BaseObservable {private String name;private String age;@Bindablepublic String getName() {return name;}public void setName(String name) {this.name = name;notifyPropertyChanged(BR.name);}@Bindablepublic String getAge() {return age;}public void setAge(String age) {this.age = age;notifyPropertyChanged(BR.age);}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age='" + age + '\'' +'}';}
}

? BR是注解處理器(Annotation Processing Tool,簡稱APT)解析JavaBean生成的類,和android中的R文件類似。編寫完JavaBean之后,通過Build生成的類,

package com.example.jetpack;public class BR {public static final int User = 1;public static final int _all = 0;public static final int age = 2;public static final int name = 3;
}

通過以上步驟,完成了MVVM中model層代碼的編寫。

3.View層代碼的編寫。

? ?1)在普通的layout布局中按下alt+enter鍵,選擇Convert to data binding layout,

? ? ? ? 把普通的layout轉(zhuǎn)換成 dataBinding規(guī)范的layout

轉(zhuǎn)換完之后的樣式:

? ? 1)根布局變成了layout。

? ? 2)多了一個data標(biāo)簽,這里面可以定義我們編寫的JavaBean類,如下:

? ? ? ? name 定義的是View中引用的字符串,可以通過User來獲取到里面的值

? ? ? ? type定義的是類型,?可以是基本類型也可以是自定義類型。

在View中設(shè)置值,這一步完成了數(shù)據(jù)與UI的綁定。通過@{User.name}

<TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{User.name}"android:textColor="@color/black"android:textSize="16sp" /><TextViewandroid:id="@+id/age"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{User.age}"android:textColor="@color/black"android:textSize="16sp" />

? 2)在Activity中

? ? ?代替常規(guī)寫法setContentView(R.layout.activity_data_user);

? ? ?通過DataBindingUtil.setContentView(this, R.layout.activity_data_user);把修改后的layout設(shè)置在Activity中,返回值是?ActivityDataUserBinding類型,他也是通過APT自動生成的類。

ActivityDataUserBinding的實(shí)現(xiàn)類就是ActivityDataUserBindingImpl

生成的類名是和定義layout文件名一一對應(yīng)的。

??

?Activity中完整寫法:

  private User user;private int age = 18;private ActivityDataUserBinding dataBinding;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_data_user);dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_data_user);user = new User();user.setAge(String.valueOf(age));user.setName("xiaohua");//通過返回的對象,把User對象設(shè)置進(jìn)去,沒有這一步是無法生效的。dataBinding.setUser(user);findViewById(R.id.set_user).setOnClickListener(v -> {//修改user的屬性值,界面會自動刷新。user.setAge(String.valueOf(++age));user.setName("xiaohua");});findViewById(R.id.get_user).setOnClickListener(v -> {Log.e("nyz", "user " + user.toString());});}

通過以上步驟,就完成了Model到View層的數(shù)據(jù)綁定,數(shù)據(jù)發(fā)生變化后,UI自動刷新。

4)DataBinding是如何做到UI發(fā)生變化自動更新數(shù)據(jù)的呢?非常簡單。

通過@={User.name} 可以把獲取到的值,復(fù)制給User.name,在Java層可以接受到變化后的值。

這樣就完成了View到Model的數(shù)據(jù)綁定

  <EditTextandroid:id="@+id/name_et"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@={User.name}" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@={User.age}" />

具體效果:

? ?可以看到調(diào)用setValue修改User的name和age時,界面中的TextView也跟著更新了,做到了數(shù)據(jù)驅(qū)動UI。

?當(dāng)通過修改Edittext中的name和age時,TextView中的也更新了,這個就是UI變了,數(shù)據(jù)跟著變,數(shù)據(jù)變了,UI跟著變。

代碼下載:?https://download.csdn.net/download/niuyongzhi/88382202

http://www.risenshineclean.com/news/35848.html

相關(guān)文章:

  • wordpress建立網(wǎng)站寧波網(wǎng)站seo診斷工具
  • 小程序定制開發(fā)網(wǎng)站百度網(wǎng)址是什么
  • 網(wǎng)站壓縮山西網(wǎng)絡(luò)營銷seo
  • 做提升自己的網(wǎng)站汕頭自動seo
  • 織夢網(wǎng)站模板怎么做搜索引擎seo外包
  • 網(wǎng)站會員模板網(wǎng)站關(guān)鍵詞推廣價格
  • vultr 做網(wǎng)站搜索引擎優(yōu)化的完整過程
  • vs2012手機(jī)網(wǎng)站開發(fā)教程常用的五種網(wǎng)絡(luò)營銷工具
  • 工藝禮品東莞網(wǎng)站建設(shè)seoul national university
  • asp網(wǎng)站制作實(shí)例教程目前網(wǎng)絡(luò)推廣平臺
  • 天寧寺網(wǎng)站建設(shè)seo學(xué)校培訓(xùn)
  • 站長工具綜合查詢ip怎樣在百度上發(fā)布作品
  • 怎么做提取微信62的網(wǎng)站網(wǎng)頁制作流程
  • 網(wǎng)站的內(nèi)連接如何做沈陽優(yōu)化網(wǎng)站公司
  • 怎么通過域名做網(wǎng)站年度關(guān)鍵詞有哪些
  • 在那個網(wǎng)站做義工好河南網(wǎng)站建設(shè)定制
  • 江蘇專業(yè)的網(wǎng)站建設(shè)一點(diǎn)優(yōu)化
  • 定制網(wǎng)站開發(fā)報價單百度優(yōu)化怎么做
  • 龍華網(wǎng)站建設(shè)推廣平臺百度新聞發(fā)布
  • dw網(wǎng)站怎么做跳轉(zhuǎn)網(wǎng)站seo設(shè)計
  • 微信上建微網(wǎng)站要錢嗎深圳seo優(yōu)化服務(wù)
  • 會展設(shè)計專業(yè)學(xué)什么百度seo整站優(yōu)化
  • 重慶網(wǎng)領(lǐng)網(wǎng)站建設(shè)公司百度快照客服人工電話
  • 內(nèi)容導(dǎo)購網(wǎng)站模板網(wǎng)頁設(shè)計個人主頁模板
  • 網(wǎng)站建設(shè)策劃實(shí)訓(xùn)總結(jié)谷歌優(yōu)化推廣
  • 專業(yè)網(wǎng)站建設(shè)哪里好葫島百度seo
  • 企業(yè)網(wǎng)站 留言板站長之家seo查找
  • 織夢網(wǎng)站如何做seo班級優(yōu)化大師免費(fèi)下載
  • 廣州網(wǎng)站建設(shè)廣州網(wǎng)絡(luò)推廣公司如何建立一個網(wǎng)站
  • ftp網(wǎng)站劫持微博推廣怎么做