Android Data Binding

Vă prezentăm cum să vă pregătiți mediul de dezvoltare pentru a lucra cu Data Binding Library, inclusiv suport pentru codul de legare a datelor în Android Studio.

Pasul 1. Activarea legării datelor:

Pentru a utiliza legarea datelor în proiectul nostru trebuie să o activăm în fișierul build.gradle la nivel de aplicație.

dataBinding {
enabled = true
}

Pasul 2. Modificarea fișierului de layout pentru a fi utilizabil cu data-binding:

Limbajul de expresii vă permite să scrieți expresii care conectează variabilele la vizualizările din layout. Biblioteca Data Binding generează automat clasele necesare pentru a lega vederile din layout cu obiectele de date. Biblioteca oferă caracteristici precum importuri, variabile și includeri pe care le puteți utiliza în machetele dumneavoastră.

Pentru ca macheta să utilizeze legarea datelor, cea mai de sus vedere din machetă trebuie să fie <layout> view sau, în alți termeni, trebuie să înglobăm întreaga machetă în tag-ul <layout> astfel:

<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Pentru a utiliza date din alte clase sau obiecte, trebuie să creăm un obiect de date în interiorul fișierului de machetă și să declarăm variabila acelei clase sau obiect în acesta.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Pentru a evita erorile, toate numele pachetelor trebuie să înceapă cu alfabetul minuscul și toate numele claselor de date trebuie să înceapă cu alfabetul majuscul.

Pasul 3. Crearea unui obiect de legare în activitate/fragment:

Acum este timpul să conectăm layout-ul nostru la activitate/fragment folosind legarea datelor.

Crearea unui obiect de legare în fișier:
Tipul de legare este derivat din numele fișierului de layout. de exemplu, dacă numele fișierului de layout a fost activity_main.xml, atunci data-binding va crea o clasă numită ActivityMainBinding și acest fișier va include toate proprietățile și funcțiile necesare.

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

Inițializați variabila de legare în metoda onCreate():

Acum trebuie să inițializăm legarea și să înlocuim metoda existentă setContentView (). Acest lucru se poate face fie prin apelarea clasei DataBindingUtil, fie prin utilizarea directă a tipului de legare.

Pentru activitate nu se poate utiliza tipul de legare.

//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)

Pașa 4. Folosirea obiectului de legare:

Acum putem folosi legarea pe care am creat-o în două scopuri:

  1. Înlocuirea tuturor apelurilor la findViewById sau doar a importurilor sintetice prin legare.<Id-ul lui view>.

e.g dacă există o vizualizare text în layout cu id sample_text, trebuie să o folosim în oricare dintre cele două moduri date

findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"

Acum aceasta va fi înlocuită cu

binding.sampleText.text = "dummy_text"

Rețineți că numele proprietății din clasa de legare este doar forma camelcase a ID-ului vizualizării.

e.g sample_text devine sampleText

2. Setarea variabilei declarate în obiectul de date din layout și apoi utilizarea acesteia în fișierul de layout.

Dacă fișierul de layout are o variabilă numită „user”

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Atunci trebuie să o setăm în activity/fragment

binding.user = User()

Și acum o putem utiliza pentru popularea datelor din vizualizări.

De exemplu, dacă există o vizualizare text care afișează numele utilizatorului, atunci putem folosi sintaxa @{} pentru a seta valoarea.

<TextView 
...
android:text="@{user.userName}"
...
/>

În acest fel, putem evita o mulțime de cod care trebuie făcut pentru a seta vizualizările în mod programatic și putem lăsa data-binding să se ocupe de asta.

.

Leave a Reply