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