第一部分 databinding (ktn)
布局 <layout> 中包含两部分
一部分 数据 数据必须 <data></data>包含
xml文件
1.<import 导包
2.<variable 数据
<data>
<import type="android.util.SparseArray"/>
<import type="java.util.Map"/>
<import type="java.util.List"/>
<variable name="list" type="List<String>"/>
<variable name="sparse" type="SparseArray<String>"/>
<variable name="map" type="Map<String, String>"/>
<variable name="index" type="int"/>
<variable name="key" type="String"/>
</data>
…
android:text="@{list[index]}"
…
android:text="@{sparse[index]}"
…
android:text="@{map[key]}"
二部分 布局 跟以前xml类似 多了绑定数据
基本符合都支持
单项绑定
1.绑定基本数据
android:text="@{map[`firstName`]}"
<include layout="@layout/name"
bind:user="@{user}"/>
<ImageView app:imageUrl="@{venue.imageUrl}" app:error="@{@drawable/venueError}" />
2. 绑定事件
android:onClick="@{handlers::onClickFriend}"
android:onClick="@{() -> presenter.onSaveClick(task)}" />
3.绑定 adpter
app:setAdapter="@{model.getAdapter()}"
4.显示
android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
双向绑定 (@={}
符号,其重要的包括符号“=”,接收数据的变化的属性,并在同一时间收听用户的更新。)
<CheckBox android:layout_width="match_parent" android:layout_height="wrap_content" android:checked="@ = {viewmodel.rememberMe}"/>
public class LoginViewModel extends BaseObservable { // private Model data = ... @Bindable public Boolean getRememberMe() { return data.rememberMe; } public void setRememberMe(Boolean value) { // Avoids infinite loops. if (data.rememberMe != value) { data.rememberMe = value; // React to the change. saveData(); // Notify observers of a new value. notifyPropertyChanged(BR.remember_me); } } }
双向绑定 支持者
类 | 属性 |
---|