您好,登錄后才能下訂單哦!
這篇文章主要介紹“Android數據雙向綁定的實現原理和應用場景是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Android數據雙向綁定的實現原理和應用場景是什么”文章能幫助大家解決問題。
安卓的數據雙向綁定類似Vue這種前端框架,只要修改模型的數據,頁面上顯示的數據也會跟著變化,不需要取出控件來賦值。
修改配置文件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
格式如下:
根節點是
節點聲明了需要綁定的變量
@{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)創建模型對象,必須繼承基類androidx.databinding.BaseObservable
@Bindable:聲明該屬性可以用于綁定
修改setXX方法,調傭notifyPropertyChanged(BR.text)
發送修改通知;也可以調用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("我是測試數據"); binding.setUser(entity); } }
后續只要修改entity的屬性值,頁面控件就會自動跟著變化
關于“Android數據雙向綁定的實現原理和應用場景是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。