Android Data Binding
Podívejme se, jak připravit vývojové prostředí na práci s knihovnou Data Binding Library, včetně podpory kódu datových vazeb v aplikaci Android Studio.
Krok 1. Povolení datové vazby:
Chceme-li v našem projektu používat datovou vazbu, musíme ji povolit v souboru build.gradle na úrovni aplikace.
dataBinding {
enabled = true
}
Krok 2. Změňte soubor rozvržení tak, aby byl použitelný s data-binding:
Výrazový jazyk umožňuje psát výrazy, které propojují proměnné s pohledy v rozvržení. Knihovna datových vazeb automaticky generuje třídy potřebné k provázání pohledů v rozvržení s vašimi datovými objekty. Knihovna poskytuje funkce, jako jsou importy, proměnné a includy, které můžete použít ve svých rozvrženích.
Pro použití datové vazby v rozvržení by měl být nejvyšším pohledem v rozvržení pohled <layout> nebo jinak řečeno, musíme celé rozvržení zabalit do značky <layout> takto:
<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Pro použití dat z jiných tříd nebo objektů musíme vytvořit datový objekt uvnitř souboru rozvržení a deklarovat v něm proměnnou této třídy nebo objektu.
<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>
Aby se předešlo chybám, měly by všechny názvy balíčků začínat malými písmeny a názvy všech datových tříd by měly začínat velkými písmeny.
Krok č. 3. Vytvoření objektu vazby v aktivitě/fragmentu:
Nyní je čas propojit náš layout s aktivitou/fragmentem pomocí datové vazby.
Vytvořte objekt vazby v souboru:
Typ vazby je odvozen od názvu souboru layoutu. např. pokud se soubor layoutu jmenoval activity_main.xml, pak datová vazba vytvoří třídu s názvem ActivityMainBinding a tento soubor bude obsahovat všechny požadované vlastnosti a funkce.
private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding
Inicializujte proměnnou vazby v metodě onCreate():
Nyní musíme vazbu inicializovat a nahradit stávající metodu setContentView (). To můžeme provést buď voláním třídy DataBindingUtil, nebo přímo pomocí typu vazby.
Pro aktivitu nelze typ vazby použít.
//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)
Krok 4. Zvolíme-li typ vazby DataBindingUtil, můžeme jej použít. Použití vazebního objektu:
Nyní můžeme použít vytvořenou vazbu ke dvěma účelům:
- Záměna všech volání findViewById nebo jen syntetických importů pomocí vazby.<id pohledu>.
e.g pokud je v rozvržení textový pohled s id sample_text, musíme jej použít jedním ze dvou uvedených způsobů
findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"
Nyní bude nahrazen
binding.sampleText.text = "dummy_text"
Všimněte si, že název vlastnosti ve vazební třídě je pouze camelcase forma ID pohledu.
e.g sample_text se stane sampleText
2. Nastavení proměnné deklarované v datovém objektu v rozvržení a její následné použití v souboru rozvržení.
Pokud má soubor rozvržení proměnnou s názvem „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>
Tak ji musíme nastavit v aktivitě/fragmentu
binding.user = User()
A nyní ji můžeme použít pro naplnění dat pohledů.
Např. pokud existuje textový pohled, který zobrazuje jméno uživatele, pak můžeme pro nastavení hodnoty použít syntaxi @{}.
<TextView
...
android:text="@{user.userName}"
...
/>
Tímto způsobem se můžeme vyhnout spoustě kódu, který je třeba udělat pro programové nastavení pohledů, a nechat data-binding, aby se o to postaral.
Leave a Reply