dataBinding和viewBinding的區(qū)別

一、概念介紹:

1费彼、dataBinding的優(yōu)點有哪些滑臊?

1、減少代碼量:使用數據綁定可以減少代碼量箍铲,因為不需要手動更新UI雇卷,而是通過數據的變化自動更新UI。
2颠猴、提高開發(fā)效率:數據綁定可以提高開發(fā)效率聋庵,因為不需要手動更新UI,開發(fā)人員可以更快地完成開發(fā)任務芙粱。
3、降低出錯率:使用數據綁定可以降低出錯率氧映,因為不需要手動更新UI春畔,減少了手動操作的機會,從而減少了出錯的可能性。
4律姨、提高代碼可讀性:使用數據綁定可以提高代碼可讀性振峻,因為數據綁定可以將UI和數據分離,使代碼更加清晰易懂择份。
5扣孟、支持MVVM架構:數據綁定是MVVM架構的重要組成部分,可以幫助開發(fā)人員更好地實現MVVM架構荣赶。
6凤价、支持雙向綁定:數據綁定支持雙向綁定,可以使UI和數據之間的同步更加方便和快捷拔创。

2利诺、viewBinding的優(yōu)點有哪些?

1剩燥、簡化代碼:ViewBinding可以自動生成綁定視圖的代碼慢逾,避免手動findViewById的繁瑣過程,使代碼更加簡潔灭红。
2侣滩、安全性高:ViewBinding使用類型安全的方式綁定視圖,避免了類型轉換錯誤的問題变擒,提高了代碼的安全性君珠。
3、性能優(yōu)化:ViewBinding使用了單例模式赁项,避免了重復創(chuàng)建視圖對象的問題葛躏,提高了應用的性能。
4悠菜、可讀性強:ViewBinding使用了命名規(guī)范舰攒,使代碼更加易讀易懂,提高了代碼的可維護性悔醋。
5摩窃、兼容性好:ViewBinding可以與DataBinding、LiveData等其他Android Jetpack組件一起使用芬骄,提高了應用的兼容性猾愿。

3、dataBinding和viewBinding的區(qū)別账阻?

dataBinding和viewBinding都是Android中的數據綁定技術蒂秘,但是它們有以下區(qū)別:

1、作用對象不同:dataBinding主要用于將數據綁定到布局文件中的視圖上淘太,而viewBinding主要用于將布局文件中的視圖綁定到代碼中的View對象上姻僧。
2规丽、使用方式不同:dataBinding需要在布局文件中添加特定的標記和表達式來實現數據綁定,而viewBinding只需要在代碼中使用特定的方法來獲取綁定的View對象撇贺。
3赌莺、支持的最低版本不同:dataBinding需要在Android Studio 1.3及以上版本中使用,而viewBinding需要在Android Studio 3.6及以上版本中使用松嘶。
4艘狭、功能不同:dataBinding除了數據綁定外,還支持雙向綁定翠订、表達式巢音、事件綁定等功能,而viewBinding只支持視圖綁定蕴轨。
5港谊、性能不同:dataBinding在數據綁定時需要進行額外的處理,可能會影響性能歧寺,而viewBinding只是在初始化時進行視圖綁定,對性能影響較小棘脐。

注意:如果沒有數據綁定需求,建議使用viewBinding蛀缝,性能開銷比較小。

二屈梁、使用:

1、dataBinding使用

1在讶、啟用DataBinding

 // 啟用DataBinding
 dataBinding {
    enabled true
 }

2煞抬、MainActivity3 中綁定

class MainActivity3 : AppCompatActivity() {
    var binding: ActivityMain3Binding? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //綁定
        binding = ActivityMain3Binding.inflate(layoutInflater)

        binding?.tvTitle?.text = "最新賦值的UUUU"

        setContentView(binding?.root)
    }
}
public class MainActivity extends AppCompatActivity {
 ActivityMainBinding binding  = null
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           
        // 創(chuàng)建綁定類
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
           
        // 設置 TextView 的文本
        binding.myTextView.setText("Hello, DataBinding!");
    }
    override fun onDestroy() {
        super.onDestroy();
        binding  = null;
    }
}

3构哺、activity_main3.xml文件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    tools:ignore="MissingDefaultResource">

    <data>
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="你好啊"
            />

    </LinearLayout>
</layout>

2革答、viewBinding 在activity中使用

1、啟用ViewBinding

   // 啟用ViewBinding
        viewBinding {
            enabled true
        }

2曙强、MainActivity3中使用

class MainActivity3: AppCompatActivity() {

    var binding:ActivityMain3Binding? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMain3Binding.inflate(layoutInflater)
        setContentView(binding?.root)
        binding?.tvValue?.text = "我是濤哥啊"
    }
}

3残拐、activity_main3.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView
        android:id="@+id/tv_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="默認值"
        />
</LinearLayout>

3、viewBinding 在fragment中使用

class BlankFragment2 : Fragment() {
    
    var fb: FragmentBlank2Binding ? = null;

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        // return inflater.inflate(R.layout.fragment_blank2, container, false)
        fb = FragmentBlank2Binding.inflate(layoutInflater)
        fb!!.ff2.text = "PL"
        return fb!!.root
    }
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BlankFragment2">
    <TextView
        android:id="@+id/ff2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello blank fragment" />

</FrameLayout>

4碟嘴、其它使用

//Kotlin 主要在Activity或Fragment中使用:
ActivityMainBinding binding = DataBindingUtil.setContentView(context, R.layout.activity_main);
//獲取整體布局view
val view = binding.root

//java 主要在adapter或者自定view中使用綁定
ItemFlowLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_flow_layout, null, false);
//獲取整體布局view
View view = binding.getRoot()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末溪食,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子娜扇,更是在濱河造成了極大的恐慌眠菇,老刑警劉巖边败,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異捎废,居然都是意外死亡,警方通過查閱死者的電腦和手機致燥,發(fā)現死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門登疗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫌蚤,你說我怎么就攤上這事辐益。” “怎么了脱吱?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵智政,是天一觀的道長。 經常有香客問我箱蝠,道長续捂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任宦搬,我火速辦了婚禮牙瓢,結果婚禮上,老公的妹妹穿的比我還像新娘间校。我一直安慰自己矾克,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布憔足。 她就那樣靜靜地躺著胁附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滓彰。 梳的紋絲不亂的頭發(fā)上控妻,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音找蜜,去河邊找鬼饼暑。 笑死,一個胖子當著我的面吹牛洗做,可吹牛的內容都是我干的弓叛。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼撰筷,長吁一口氣:“原來是場噩夢啊……” “哼畦徘!你這毒婦竟也來了抬闯?” 一聲冷哼從身側響起关筒,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蒸播,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胀屿,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡宿崭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年葡兑,在試婚紗的時候發(fā)現自己被綠了铁孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜕劝,死狀恐怖岖沛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情婴削,我是刑警寧澤牙肝,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站虫溜,受9級特大地震影響股缸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜敦姻,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迷守。 院中可真熱鬧,春花似錦盒犹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晨雳,卻和暖如春奸腺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背突照。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工讹蘑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人座慰。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像游盲,于是被迫代替她去往敵國和親蛮粮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容