Куда прикрепляется view у Compose

Ответ

В 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. Ты описываешь желаемый результат, а фреймворк уже сам, хитрая жопа, решает, как это отрендерить на экране. Сначала мозг ломается, но потом, когда втянешься — красота, ядрёна вошь!