Android Data Binding
Laten we eens kijken hoe je je ontwikkelomgeving klaar kunt maken om te werken met de Data Binding Library, inclusief ondersteuning voor data binding code in Android Studio.
Stap 1. Schakel data-binding in:
Om data-binding in ons project te gebruiken moeten we het inschakelen in het app-niveau build.gradle bestand.
dataBinding {
enabled = true
}
Step 2. Wijzig het lay-out bestand om bruikbaar te zijn met data-binding:
De expressietaal stelt u in staat om expressies te schrijven die variabelen verbinden met de views in de lay-out. De Data Binding Library genereert automatisch de klassen die nodig zijn om de views in de layout te binden met uw data-objecten. De bibliotheek biedt functies zoals imports, variabelen en includes die u in uw lay-outs kunt gebruiken.
Om gegevensbinding te kunnen gebruiken, moet de bovenste weergave in de lay-out <layout> zijn, of anders gezegd, we moeten de hele lay-out in <layout> tag wikkelen, zoals dit:
<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Om gegevens van andere klassen of objecten te gebruiken, moeten we een gegevensobject in het lay-outbestand maken en de variabele van die klasse of dat object erin declareren.
<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>
Om fouten te vermijden moeten alle pakketnamen beginnen met een kleine letter en moeten alle namen van de gegevensklassen beginnen met een hoofdletter.
Stap 3. Maak een bindingsobject in de activiteit/fragment:
Nu is het tijd om onze opmaak te verbinden met de activiteit/fragment met behulp van data-binding.
Maak een bindingsobject in het bestand:
Het type binding wordt afgeleid van de naam van het opmaakbestand. bijv. als het opmaakbestand activity_main.xml was, dan zal data-binding een klasse met de naam ActivityMainBinding aanmaken en dit bestand zal alle vereiste eigenschappen en functies bevatten.
private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding
Initialiseer de bindingsvariabele in de onCreate() methode:
Nu moeten we de binding initialiseren en de bestaande setContentView () methode vervangen. Dit kan worden gedaan door de klasse DataBindingUtil op te roepen of door rechtstreeks het bindingstype te gebruiken.
Voor activiteit kan bindingstype niet worden gebruikt.
//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)
Stap 4. Gebruik het bindingsobject:
Nu kunnen we de binding die we hebben gemaakt voor twee doeleinden gebruiken:
- Alle oproepen naar findViewById of alleen de synthetische invoer door binding vervangen.<view’s id>.
e.Als er bijvoorbeeld een tekstweergave in de lay-out is met id sample_text, moeten we deze op een van de twee gegeven manieren gebruiken
findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"
Nu wordt deze vervangen door
binding.sampleText.text = "dummy_text"
Merk op dat de naam van de eigenschap in de bindende klasse gewoon de hoofdlettervorm van de id van de weergave is.
e.g sample_text wordt sampleText
2. De variabele die in het gegevensobject is aangegeven, wordt in de lay-out ingesteld en vervolgens in het lay-outbestand gebruikt.
Als het lay-outbestand een variabele heeft met de naam “gebruiker”
<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>
Dan moeten we deze in activity/fragment
binding.user = User()
En nu kunnen we deze gebruiken om de gegevens van weergaven te vullen.
Bijv. als er een tekst view die de naam van de gebruiker weergeeft, dan kunnen we gebruik maken van @{} syntaxis om de waarde in te stellen.
<TextView
...
android:text="@{user.userName}"
...
/>
Op deze manier kunnen we voorkomen dat er veel code moet worden gedaan om views programmatisch in te stellen en laten we data-binding verzorgen.
Leave a Reply