Android adatkötés

Lássuk, hogyan készítsük fel a fejlesztőkörnyezetet az adatkötési könyvtárral való munkára, beleértve az Android Studio adatkötési kódjának támogatását.

1. lépés. Engedélyezzük az adatkötést:

Az adatkötés használatához a projektünkben engedélyeznünk kell azt az alkalmazás szintű build.gradle fájlban.

dataBinding {
enabled = true
}

2. lépés. Az elrendezési fájl módosítása, hogy használható legyen az adatkötéssel:

A kifejezésnyelv lehetővé teszi, hogy olyan kifejezéseket írjunk, amelyek a változókat az elrendezésben lévő nézetekhez kapcsolják. Az adatkötési könyvtár automatikusan létrehozza az elrendezésben lévő nézeteknek az adatobjektumokhoz való kötéséhez szükséges osztályokat. A könyvtár olyan funkciókat biztosít, mint az importálás, a változók és az include-ok, amelyeket az elrendezésekben használhat.

Az adatkötés használatához az elrendezésben a legfelső nézetnek az elrendezésben a <layout> nézetnek kell lennie, vagy másképpen fogalmazva, az egész elrendezést a <layout> tagbe kell csomagolnunk, így:

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

A más osztályokból vagy objektumokból származó adatok használatához létre kell hoznunk egy adatobjektumot az elrendezési fájlban, és abban kell deklarálnunk az adott osztály vagy objektum változóját.

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

A hibák elkerülése érdekében minden csomag nevének kisbetűvel, minden adatosztály nevének pedig nagybetűvel kell kezdődnie.

3. lépés. Létrehozunk egy kötési objektumot az activityben/fragmentben:

Most itt az ideje, hogy adatkötés segítségével összekapcsoljuk az elrendezésünket az activityvel/fragmenttel.

Létrehozunk egy kötési objektumot a fájlban:
A kötés típusa az elrendezési fájl nevéből származik. pl. ha az elrendezési fájl neve activity_main volt.xml, akkor az adatkötés létrehoz egy ActivityMainBinding nevű osztályt, és ez a fájl tartalmazza az összes szükséges tulajdonságot és funkciót.

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

Inicializáljuk a kötésváltozót az onCreate() metódusban:

Most inicializálnunk kell a kötést, és le kell cserélnünk a meglévő setContentView () metódust. Ezt vagy a DataBindingUtil osztály meghívásával, vagy közvetlenül a kötéstípus használatával lehet megtenni.

Az aktivitáshoz a kötéstípus nem használható.

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

4. lépés. A kötőobjektum használata:

Most két célra használhatjuk az általunk létrehozott kötést:

  1. A findViewById összes hívását vagy csak a szintetikus importálást helyettesíthetjük a kötéssel.<view’s id>.

e.g ha van egy szöveges nézet az elrendezésben a sample_text id-vel, akkor ezt a két megadott mód valamelyikén kell használnunk

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

Most ezt helyettesíteni fogja

binding.sampleText.text = "dummy_text"

Megjegyezzük, hogy a tulajdonság neve a kötési osztályban csak a nézet azonosítójának camelcase formája.

e.g sample_textből sampleText lesz

2. Az adatobjektumban deklarált változó beállítása az elrendezésben, majd használata az elrendezési fájlban.

Ha az elrendezési fájlban van egy “user” nevű változó

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

Azt az activity/fragmentben kell beállítanunk

binding.user = User()

És most már használhatjuk ezt a nézetek adatainak feltöltésére.

pl. ha van egy szöveges nézet, amely megjeleníti a felhasználó nevét, akkor használhatjuk a @{} szintaxist az érték beállításához.

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

Így elkerülhetjük a nézetek programozott beállításához szükséges sok kódot, és hagyhatjuk, hogy az adatkötés gondoskodjon róla.

Leave a Reply