V klasickém vývoji pro Android definujete vzhled v XML souborech a logiku v Java nebo Kotlin kódu.
Stručně řečeno, findViewById
je imperativní přístup, kde ručně hledáte prvek UI (View) a přikazujete mu, jak se má změnit.
Příklad v Javě s XML:
// V XML layoutu:
// <TextView android:id="@+id/myTextView" ... />
// <Button android:id="@+id/myButton" ... />
// V těle třídy Activity/Fragmentu:
public class MyActivity extends AppCompatActivity {
private int count = 0;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.myTextView);
Button button = findViewById(R.id.myButton);
textView.setText(String.valueOf(count));
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
textView.setText(String.valueOf(count)); // Manuální aktualizace
}
});
}
}
Jetpack Compose je deklarativní framework pro tvorbu UI.
remember { mutableStateOf() }
je deklarativní přístup Jetpack Compose, kde popíšete, jak má UI vypadat v závislosti na stavu, a systém se automaticky postará o jeho aktualizaci při změně tohoto stavu.mutableStateOf(hodnota)
vytvoří pozorovatelný objekt stavu. Jakákoli změna jeho .value
je sledována systémem Compose.remember
je klíčová funkce, která si "pamatuje" stav napříč tzv. rekompozicemi.
Příklad v Jetpack Compose:
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) } // Deklarace stavu
Column {
Text(text = count.toString()) // UI je svázáno se stavem
Button(onClick = {
count++ // Pouze změna stavu, UI se aktualizuje automaticky
}) {
Text("Click Me")
}
}
}
Vlastnost | findViewById (XML) |
remember { mutableStateOf() } (Compose) |
---|---|---|
Paradigma | Imperativní (přikazujete, co dělat) | Deklarativní (popisujete, jak má vypadat) |
Aktualizace UI | Manuální (např. textView.setText() ) |
Automatická (při změně stavu dochází k rekompozici) |
Správa stavu | Ruční, oddělená od UI | Integrovaná, UI je funkcí stavu |
Propojení kódu | Oddělení XML (vzhled) a Kotlin/Java (logika) | Vzhled i logika jsou definovány společně v Kotlinu |