Java/Kotlin + XML

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

Jetpack Compose je deklarativní framework pro tvorbu UI.

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")
        }
    }
}

Srovnávací tabulka

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