Android Data Binding

Katsotaan, miten saat kehitysympäristösi valmiiksi Data Binding Library -kirjaston kanssa työskentelyyn, mukaan lukien tuki datan sidontakoodille Android Studiossa.

Vaihe 1. Ota datan sitominen käyttöön:

Käyttääksemme datan sitomista projektissamme meidän on otettava se käyttöön sovellustason build.gradle-tiedostossa.

dataBinding {
enabled = true
}

Vaihe 2. Muuta asettelutiedosto käyttökelpoiseksi datan sitomisen kanssa:

Lausekekielen avulla voit kirjoittaa lausekkeita, jotka yhdistävät muuttujat asettelun näkymiin. Tietosidontakirjasto luo automaattisesti luokat, joita tarvitaan asettelussa olevien näkymien sitomiseen tieto-objekteihin. Kirjasto tarjoaa ominaisuuksia, kuten importteja, muuttujia ja includeja, joita voit käyttää asetteluissasi.

Jotta asettelu voisi käyttää datan sitomista, asettelun ylimmän näkymän pitäisi olla <layout>-näkymä tai toisin sanoen meidän täytyy kietoa koko asettelu <layout>-tagiin näin:

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

Käyttääksemme muiden luokkien tai objektien dataa meidän täytyy luoda asettelutiedoston sisälle data-objekti ja ilmoittaa siinä kyseisen luokan tai objektin muuttuja.

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

Virheiden välttämiseksi kaikkien pakettien nimien tulee alkaa pienillä aakkosilla ja kaikkien dataluokkien nimien tulee alkaa isoilla aakkosilla.

Vaihe 3. Luo sidontaobjekti aktiviteettiin/fragmenttiin:

Nyt on aika liittää asettelumme aktiviteettiin/fragmenttiin datasidonnan avulla.

Luo sidontaobjekti tiedostoon:
Sidontatyyppi johdetaan asettelutiedoston nimestä. esim. jos asettelutiedoston nimi oli activity_main.xml, niin datasidonta luo luokan nimeltä ActivityMainBinding ja tämä tiedosto sisältää kaikki tarvittavat ominaisuudet ja funktiot.

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

Initialisoi sidontamuuttuja onCreate()-metodissa:

Jatkossa meidän on alustettava sidonta ja korvattava olemassa oleva setContentView ()-metodi. Tämä voidaan tehdä joko kutsumalla DataBindingUtil-luokkaa tai käyttämällä suoraan sidostyyppiä.

Aktiivisuuteen sidostyyppiä ei voi käyttää.

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

Vaihe 4. Käytä sitovaa objektia:

Nyt voimme käyttää luomaamme sitovaa objektia kahteen tarkoitukseen:

  1. Korvaa kaikki findViewById:n kutsut tai vain synteettiset tuonnit sitovalla.<näkymän id>.

e.g jos ulkoasussa on tekstinäkymä id:llä sample_text, meidän on käytettävä tätä jommallakummalla annetuista tavoista

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

Nyt tämä korvataan

binding.sampleText.text = "dummy_text"

Huomaa, että ominaisuuden nimi sidontaluokassa on vain näkymän ID:n camelcase-muoto.

e.g sample_textistä tulee sampleText

2. Asetetaan dataobjektissa ilmoitettu muuttuja asettelussa ja käytetään sitä sitten asettelutiedostossa.

Jos asettelutiedostossa on muuttuja nimeltä ”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>

Tällöin meidän on asetettava tämä aktiviteetissa/fragmentissa

binding.user = User()

Ja nyt voimme käyttää tätä näkymien tietojen täyttämiseen.

e.g. jos on tekstinäkymä, joka näyttää käyttäjän nimen, niin voimme käyttää @{}-syntaksia arvon asettamiseen.

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

Tällä tavalla voimme välttää paljon koodia, jota pitää tehdä näkymien asettamiseksi ohjelmallisesti ja antaa datan sitomisen hoitaa sen.

Leave a Reply