Android DataBinding (a) Utilisation de base
Android DataBinding (deux) gestionnaire d'événements
Android DataBinding (trois) Observable (papier)
Android DataBinding (d) attributs personnalisés
Android DataBinding (cinq) de manière personnalisée de représentation obligatoire
Android DataBinding (six) cravate EditText étant donné TextChangedListener et FocusChangeListener
BaseObservable
Après le changement de la valeur du ViewModel, si vous avez besoin de rafraîchir l'écran en conséquence, il peut être héritée BaseObservable.
private static class User extends BaseObservable {
private String firstName;
private String lastName;
@Bindable
public String getFirstName() {
return this.firstName;
}
@Bindable
public String getLastName() {
return this.lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}
Dans la méthode définie, en utilisant NotifyPropertyChanged pour notifier la mise à jour de l' interface utilisateur, rafraîchissement NotifyPropertyChanged seules certaines valeurs, méthode NotifyChange actualise toutes les valeurs.
BR domaine est généré en ajoutant @Bindable sur la méthode get.
Les champs observable
Hérité de façon BaseObservable un peu compliqué, DataBinding fournit également un libellé simple --ObservableField.
private static class User {
public final ObservableField<String> firstName =
new ObservableField<>();
public final ObservableField<String> lastName =
new ObservableField<>();
public final ObservableInt age = new ObservableInt();
}
Définie comme type d'attribut directement ObservableField, et le modificateur public final est nécessaire.
En outre ObservableField, vous pouvez aussi être utilisé ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, ObservableParcelable.
Visitez vaut le temps, vous pouvez utiliser la méthode obtenir ensemble.
user.firstName.set("Google");
int age = user.age.get();
Collections observable
Si vous utilisez la carte, la liste et d'autres données sauvegardées. Databinding fournit également ObservableArrayMap, ObservableArrayList.
ObservableArrayMap
ObservableArrayMap<String, Object> user = new ObservableArrayMap<>();
user.put("firstName", "Google");
user.put("lastName", "Inc.");
user.put("age", 17);
<data>
<import type="android.databinding.ObservableMap"/>
<variable name="user" type="ObservableMap<String, Object>"/>
</data>
…
<TextView
android:text='@{user["lastName"]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text='@{String.valueOf(1 + (Integer)user["age"])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
ObservableArrayList
ObservableArrayList<Object> user = new ObservableArrayList<>();
user.add("Google");
user.add("Inc.");
user.add(17);
<data>
<import type="android.databinding.ObservableList"/>
<import type="com.example.my.app.Fields"/>
<variable name="user" type="ObservableList<Object>"/>
</data>
…
<TextView
android:text='@{user[Fields.LAST_NAME]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>