Ответ
В Compose view не прикрепляются к традиционной иерархии View, как в XML. Вместо этого Compose строит UI декларативно, описывая его в функциях (@Composable).
Compose использует Composition – дерево объектов, описывающих UI. При изменении состояния перекомпозиция перестраивает только необходимые части.
Пример:
@Composable
fun MyScreen() {
Column { // <- Composable функция, не View
Text("Hello")
Button(onClick = {}) {
Text("Click me")
}
}
}
Здесь Column, Text, Button – не View, а описания UI, которые Compose преобразует в реальные View под капотом.
Ответ 18+ 🔞
А, ну это же про Compose! Давай разберёмся, что за ёперный театр тут происходит.
Смотри, тут всё не как в старом добром XML, где ты вьюхи друг в дружку вкладываешь, как матрёшку. Тут подход другой, декларативный. То есть ты не говоришь системе: «Создай LinearLayout, потом в него положи TextView, а потом сделай ему margin». Ты просто описываешь, как должен выглядеть твой интерфейс при определённых данных. А система уже сама, под капотом, думает, как это нарисовать. Э, бошка, думай!
Вот смотри на этот кусок кода:
@Composable
fun MyScreen() {
Column { // <- Это же не View, ёпта!
Text("Hello")
Button(onClick = {}) {
Text("Click me")
}
}
}
Видишь? Column, Text, Button — это не объекты android.view.View. Это, бля, инструкции для Compose. Ты как будто говоришь: «Эй, система, я хочу колонку, а в ней текст „Hello“, а под ним кнопку с другим текстом». А как именно это сделать — это уже её, сука, проблемы. Она сама создаст, переиспользует или выкинет настоящие вьюхи, когда захочет. Доверия к ней, конечно, ебать ноль сначала, но потом привыкаешь.
Вся эта магия живёт в штуке под названием Composition. Это, грубо говоря, дерево из твоих @Composable-функций, которое Compose строит в памяти. Когда состояние меняется (например, переменная счётчика обновилась), Compose смотрит, какие части этого дерева зависят от этой переменной, и перезапускает только их. Это и есть перекомпозиция. Всё остальное он не трогает, умный, блядь. Не то что раньше, когда из-за одной опечатки весь лейаут заново инфлейтился, и приложение лагало, как старая кобыла.
Так что запомни: в Compose ты не прикрепляешься к иерархии View. Ты описываешь желаемый результат, а фреймворк уже сам, хитрая жопа, решает, как это отрендерить на экране. Сначала мозг ломается, но потом, когда втянешься — красота, ядрёна вошь!