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