成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android Data Binding

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

1. 基本結(jié)構

 

1.1 JavaBeans對象

 

  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. 動態(tài)更新

 

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

 

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

 

2.1 Observable 對象

 

實現(xiàn)android.databinding.Observable或繼承其實現(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ù)類型都有相應的Observable類

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

2.3 Observable 集合

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

 

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

 

2.4 引用

無論是對象、字段還是集合,都是以Observable的方式存儲數(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 對象 --> 
  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動態(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); 
責任編輯:chenqingxiang 來源: LeoHsiun
相關推薦

2015-08-11 10:48:00

DataBindingAndroid

2013-12-26 16:59:12

Android開發(fā)Android應用數(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ā)學

2022-06-01 07:50:46

Web服務WSDL

2013-09-22 16:59:02

Informatica

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ù)

2021-01-08 10:19:36

鴻蒙HarmonyOS應用

2022-08-31 14:58:48

data lakescloud natibig data

2018-04-23 10:36:45

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

2009-11-20 13:51:14

Oracle Data

2024-05-17 09:01:24

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

2024-10-23 08:13:30

Spring響應式編程

2012-12-25 10:44:06

IBMdW

2009-11-09 16:25:24

WCF Data Co

2012-09-20 10:47:52

IBMdw

2013-09-22 10:15:01

Spring DataJPA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品亚洲国产 | 亚洲国产精品成人无久久精品 | 视频一区二区三区在线观看 | 天天插天天搞 | 国产91一区二区三区 | 免费观看一级特黄欧美大片 | 国产这里只有精品 | 久久久久久av | 欧美色综合网 | 天天干天天干 | 黄色片网站在线观看 | 久草在线青青草 | 日韩男人天堂 | 久久久久国产一区二区三区四区 | 国产一区二区三区视频 | 91精品91久久久 | 中文字字幕在线中文乱码范文 | 日韩精品专区在线影院重磅 | 欧州一区二区三区 | 精品日韩一区二区三区av动图 | 中文字幕高清av | 男人天堂av网 | 激情小视频 | 日本三级做a全过程在线观看 | 成人av免费播放 | 欧美九九九 | 日本涩涩网 | 欧美日韩一区二区在线观看 | 国产精品欧美一区二区 | 欧美专区日韩专区 | 亚洲一区视频 | 亚洲色综合| 欧美日韩国产在线观看 | 国产亚洲精品美女久久久久久久久久 | 国色天香成人网 | 无码日韩精品一区二区免费 | 亚洲综合区 | 免费欧美视频 | 五月天婷婷综合 | 免费黄色录像片 | 中文字幕高清在线 |