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

Android Data Binding

移動開發 Android
正常的數據源只能做到綁定,想要動態更新,就必須要用Observable的方式存儲數據,以下是實現Observable的三種方式。

1. 基本結構

 

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

以上三步完成了基本數據綁定

 

2. 動態更新

 

當JavaBean對象的數據發生變化時,View自動更新。

 

正常的數據源只能做到綁定,想要動態更新,就必須要用Observable的方式存儲數據,以下是實現Observable的三種方式。

 

2.1 Observable 對象

 

實現android.databinding.Observable或繼承其實現類

  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 字段

基本的數據類型都有相應的Observable類

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

2.3 Observable 集合

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

 

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

 

2.4 引用

無論是對象、字段還是集合,都是以Observable的方式存儲數據。接下來就是在布局中引用了。

  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動態綁定

  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開發Android應用數據綁定Data Bi

2017-05-24 18:00:13

AndroidAndroid DatView

2009-12-17 15:56:34

Rails參數bind

2013-07-23 05:56:12

Android程序drawable資源保Androidj開發學

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

數據數據治理數據管理

2012-05-28 13:58:36

Hadoop大數據

2021-01-08 10:19:36

鴻蒙HarmonyOS應用

2022-08-31 14:58:48

data lakescloud natibig data

2018-04-23 10:36:45

Amazon數據處理Kinesis Dat

2009-11-20 13:51:14

Oracle Data

2024-10-23 08:13:30

Spring響應式編程

2024-05-17 09:01:24

Swift數據模型Core Data

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技術棧公眾號

主站蜘蛛池模板: 国产乱码精品1区2区3区 | 成人久草 | 在线成人免费av | 国产成人免费视频网站视频社区 | 中文字幕成人网 | 精品91久久久 | 精品日韩一区 | 中文字幕亚洲一区 | 日韩视频一区在线观看 | 在线观看 亚洲 | 2021天天干夜夜爽 | 日日噜噜噜夜夜爽爽狠狠视频, | 亚洲精品68久久久一区 | 日韩二三区 | 天天操一操 | 久久久久久久久久久久一区二区 | 亚洲欧美日韩成人在线 | 亚洲黄色av | 亚洲成人综合在线 | 日韩美女在线看免费观看 | 久久久久久久久久久久久久国产 | 国产精品99久久久久久动医院 | 亚洲狠狠丁香婷婷综合久久久 | 精品国产伦一区二区三区观看体验 | 最近日韩中文字幕 | 在线观看国产www | 日本精品一区二区 | 国产精品久久久久免费 | 国产伦一区二区三区四区 | 在线观看免费观看在线91 | 五月婷婷视频 | 亚洲毛片在线观看 | 欧美一级在线观看 | 精品美女 | 精品欧美一区免费观看α√ | 美女131mm久久爽爽免费 | 青青草原综合久久大伊人精品 | 91大神在线看 | 视频一区二区三区四区五区 | 美女爽到呻吟久久久久 | 精品欧美一区二区精品久久久 |