Android數(shù)據(jù)雙向綁定原理實現(xiàn)和應用場景
安卓的數(shù)據(jù)雙向綁定類似Vue這種前端框架,只要修改模型的數(shù)據(jù),頁面上顯示的數(shù)據(jù)也會跟著變化,不需要取出控件來賦值。
一、使用databinding類
修改配置文件build.gradle,增加配置項
android {
...
buildFeatures {
viewBinding true
}
}
修改Activity類獲取binding屬性
public class MainActivity extends AppCompatActivity { ActivityMainBinding binding; private ProgressDialog pg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); } }
接下來就可以使用binding獲取頁面的元素了,頁面的控件就是binding的一個屬性,不再需要使用findViewById方法取得控件。
比如:
binding.imageview
binding.btn
二、雙向綁定
1、增加綁定配置
修改配置文件build.gradle,增加兩個配置項
android {
...
defaultConfig {
...
dataBinding {
enabled true
}
}
...
buildFeatures {
viewBinding true
}
}
2、修改布局文件(activity_main.xml),增加一層layout
格式如下:
根節(jié)點是
節(jié)點聲明了需要綁定的變量
@{user.text}:在頁面上顯示模型屬性
@={user.text}:雙向綁定,修改控件的值后,同步修改模型屬性值
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="user" type="com.nbmt.cash.BindingEntity" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:id="@+id/textView" android:text="@{user.text}" android:background="@color/purple_200" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/edit_text" android:layout_width="wrap_content" android:layout_marginTop="20dp" android:textSize="30sp" android:layout_height="wrap_content" android:text="@={user.text}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" /> </LinearLayout> </layout>
3、在Activity中使用
1)創(chuàng)建模型對象,必須繼承基類androidx.databinding.BaseObservable
- @Bindable:聲明該屬性可以用于綁定
- 修改setXX方法,調(diào)傭
notifyPropertyChanged(BR.text)
發(fā)送修改通知;也可以調(diào)用notifyChange()
通知所有屬性
import androidx.databinding.BaseObservable; import androidx.databinding.Bindable; public class BindingEntity extends BaseObservable { private String text; public BindingEntity(String text) { this.text = text; } @Bindable public String getText() { return text; } public void setText(String text) { this.text = text; notifyPropertyChanged(BR.text); } }
2)修改Activity,使用binding對象
- ActivityMainBinding是框架自動生成的,和MainActivity對應
- 使用
DataBindingUtil.setContentView(this, R.layout.activity_main)
獲取綁定對象 - 去掉
setContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; private BindingEntity entity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); //setContentView(R.layout.activity_main); entity = new BindingEntity("我是測試數(shù)據(jù)"); binding.setUser(entity); } }
后續(xù)只要修改entity的屬性值,頁面控件就會自動跟著變化
到此這篇關(guān)于Android數(shù)據(jù)雙向綁定原理實現(xiàn)和應用場景的文章就介紹到這了,更多相關(guān)Android數(shù)據(jù)雙向綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Android中獲取資源的id和url方法總結(jié)
下面小編就為大家分享一篇基于Android中獲取資源的id和url方法總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02Ubuntu中為Android實現(xiàn)Application Frameworks層增加硬件訪問服務
本文主要介紹Android實現(xiàn) Application Frameworks層增加硬件訪問服務,這里對實現(xiàn)增加硬件訪問服務的功能做出了詳細的工作流程,并提供示例代碼,有需要的小伙伴參考下2016-08-08Android 關(guān)于ExpandableListView去掉里頭分割線的方法
下面小編就為大家?guī)硪黄狝ndroid 關(guān)于ExpandableListView去掉里頭分割線的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Android靜默安裝實現(xiàn)方案 仿360手機助手秒裝和智能安裝功能
這篇文章主要介紹了Android靜默安裝實現(xiàn)方案,仿360手機助手秒裝和智能安裝功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android自定義Dialog實現(xiàn)加載對話框效果
這篇文章將介紹如何定制當今主流的對話框,通過自定義dialog實現(xiàn)加載對話框效果,具體實現(xiàn)代碼大家通過本文學習吧2018-05-05