自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android Data Binding

移動(dòng)開發(fā) Android
正常的數(shù)據(jù)源只能做到綁定,想要?jiǎng)討B(tài)更新,就必須要用Observable的方式存儲(chǔ)數(shù)據(jù),以下是實(shí)現(xiàn)Observable的三種方式。

1. 基本結(jié)構(gòu)

 

1.1 JavaBeans對(duì)象

 

  1. public class User { 
  2. private final String firstName; 
  3. public User(String firstName) { 
  4. this.firstName = firstName; 
  5. public String getFirstName() { 
  6. return this.firstName; 

1.2 布局文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  3. <data> 
  4. <variable name="user" type="com.example.User"/> 
  5. </data> 
  6. <LinearLayout 
  7. android:orientation="vertical" 
  8. android:layout_width="match_parent" 
  9. android:layout_height="match_parent"
  10. <TextView android:layout_width="wrap_content" 
  11. android:layout_height="wrap_content" 
  12. android:text="@{user.firstName}"/> 
  13. </LinearLayout> 
  14. </layout> 

1.3 Activity

  1. @Override 
  2. protected void onCreate(Bundle savedInstanceState) { 
  3. super.onCreate(savedInstanceState); 
  4. ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity); 
  5. User user = new User("Test"); 
  6. binding.setUser(user); 

以上三步完成了基本數(shù)據(jù)綁定

 

2. 動(dòng)態(tài)更新

 

當(dāng)JavaBean對(duì)象的數(shù)據(jù)發(fā)生變化時(shí),View自動(dòng)更新。

 

正常的數(shù)據(jù)源只能做到綁定,想要?jiǎng)討B(tài)更新,就必須要用Observable的方式存儲(chǔ)數(shù)據(jù),以下是實(shí)現(xiàn)Observable的三種方式。

 

2.1 Observable 對(duì)象

 

實(shí)現(xiàn)android.databinding.Observable或繼承其實(shí)現(xiàn)類

  1. private static class User extends BaseObservable { 
  2. private String firstName; 
  3. @Bindable 
  4. public String getFirstName() { 
  5. return this.firstName; 
  6. public void setFirstName(String firstName) { 
  7. this.firstName = firstName; 
  8. notifyPropertyChanged(BR.firstName); 

2.2 Observable 字段

基本的數(shù)據(jù)類型都有相應(yīng)的Observable類

public final ObservableField<String> firstName = new ObservableField<>();

2.3 Observable 集合

ObservableArrayMap<String, Object> mapUser = new ObservableArrayMap<>();

 

user.put("firstName", "Google");

 

2.4 引用

無論是對(duì)象、字段還是集合,都是以O(shè)bservable的方式存儲(chǔ)數(shù)據(jù)。接下來就是在布局中引用了。

  1. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  2. <data> 
  3. <import type="android.databinding.ObservableMap" /> 
  4. <variable name="user" type="com.example.ObservableUser" /> 
  5. <variable name="firstName" type="android.databinding.ObservableField" /> 
  6. <variable name="mapUser" type="ObservableMap&lt;String, Object>" /> 
  7. </data> 
  8.  
  9. <LinearLayout 
  10. android:layout_width="match_parent" 
  11. android:layout_height="match_parent"
  12.  
  13. <!-- Observable 對(duì)象 --> 
  14. <TextView 
  15. android:text="@{user.firstName}" 
  16. android:layout_width="wrap_content" 
  17. android:layout_height="wrap_content" /> 
  18.  
  19. <!-- Observable 字段 --> 
  20. <TextView 
  21. android:text="@{firstName.get()}" 
  22. android:layout_width="wrap_content" 
  23. android:layout_height="wrap_content" /> 
  24.  
  25. <!-- Observable 集合 --> 
  26. <TextView 
  27. android:text="@{mapUser[`firstName`]}" 
  28. android:layout_width="match_parent" 
  29. android:layout_height="wrap_content" /> 
  30.  
  31. </LinearLayout> 
  32. </layout> 

3. RecyclerView動(dòng)態(tài)綁定

  1. private static class RecyclerViewAdapter 
  2. extends RecyclerView.Adapter<RecyclerViewAdapter.BindingHolder> { 
  3.  
  4. private List<Model> mModels; 
  5.  
  6. public static class BindingHolder extends RecyclerView.ViewHolder { 
  7. private final ViewDataBinding binding; 
  8.  
  9. public BindingHolder(ViewDataBinding binding) { 
  10. super(binding.getRoot()); 
  11. this.binding = binding; 
  12. // 這里可以binding.getRoot().findViewById,然后再onBindViewHolder中綁定事件,目前沒有找到更方便的方法 
  13.  
  14. public ViewDataBinding getBinding() { 
  15. return binding; 
  16.  
  17. @Override 
  18. public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  19. ViewDataBinding binding = DataBindingUtil.inflate( 
  20. LayoutInflater.from(parent.getContext()), 
  21. R.layout.list_item, 
  22. parent, 
  23. false); 
  24.  
  25. BindingHolder holder = new BindingHolder(binding); 
責(zé)任編輯:chenqingxiang 來源: LeoHsiun
相關(guān)推薦

2015-08-11 10:48:00

DataBindingAndroid

2013-12-26 16:59:12

Android開發(fā)Android應(yīng)用數(shù)據(jù)綁定Data Bi

2017-05-24 18:00:13

AndroidAndroid DatView

2009-12-17 15:56:34

Rails參數(shù)bind

2013-07-23 05:56:12

Android程序drawable資源保Androidj開發(fā)學(xué)

2013-09-22 16:59:02

Informatica

2022-06-01 07:50:46

Web服務(wù)WSDL

2021-01-08 10:19:36

鴻蒙HarmonyOS應(yīng)用

2011-08-10 16:45:55

Big Data

2017-08-07 10:04:49

數(shù)據(jù)數(shù)據(jù)治理數(shù)據(jù)管理

2012-05-28 13:58:36

Hadoop大數(shù)據(jù)

2022-08-31 14:58:48

data lakescloud natibig data

2012-12-25 10:44:06

IBMdW

2024-05-17 09:01:24

Swift數(shù)據(jù)模型Core Data

2009-11-20 13:51:14

Oracle Data

2018-04-23 10:36:45

Amazon數(shù)據(jù)處理Kinesis Dat

2024-10-23 08:13:30

Spring響應(yīng)式編程

2012-09-20 10:47:52

IBMdw

2009-11-09 16:25:24

WCF Data Co

2021-07-13 12:20:40

Core DataSwiftUIiOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)