您好,登錄后才能下訂單哦!
今天小編給大家分享一下Android怎么綁定數據的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1. 基本結構
1.1 JavaBeans對象
public class User { private final String firstName; public User(String firstName) { this.firstName = firstName; } public String getFirstName() { return this.firstName; } }
1.2 布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> </LinearLayout> </layout>
1.3 Activity
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity); User user = new User("Test"); binding.setUser(user); }
以上三步完成了基本數據綁定
2. 動態更新
當JavaBean對象的數據發生變化時,View自動更新。
正常的數據源只能做到綁定,想要動態更新,就必須要用Observable的方式存儲數據,以下是實現Observable的三種方式。
2.1 Observable 對象
實現android.databinding.Observable或繼承其實現類
private static class User extends BaseObservable { private String firstName; @Bindable public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; 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的方式存儲數據。接下來就是在布局中引用了。
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <import type="android.databinding.ObservableMap" /> <variable name="user" type="com.example.ObservableUser" /> <variable name="firstName" type="android.databinding.ObservableField" /> <variable name="mapUser" type="ObservableMap<String, Object>" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Observable 對象 --> <TextView android:text="@{user.firstName}" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- Observable 字段 --> <TextView android:text="@{firstName.get()}" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- Observable 集合 --> <TextView android:text="@{mapUser[`firstName`]}" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </layout>
3. RecyclerView動態綁定
private static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.BindingHolder> { private List<Model> mModels; public static class BindingHolder extends RecyclerView.ViewHolder { private final ViewDataBinding binding; public BindingHolder(ViewDataBinding binding) { super(binding.getRoot()); this.binding = binding; // 這里可以binding.getRoot().findViewById,然后再onBindViewHolder中綁定事件,目前沒有找到更方便的方法 } public ViewDataBinding getBinding() { return binding; } } @Override public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewDataBinding binding = DataBindingUtil.inflate( LayoutInflater.from(parent.getContext()), R.layout.list_item, parent, false); BindingHolder holder = new BindingHolder(binding);
以上就是“Android怎么綁定數據”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。