ComposeView.setContent() - Android Compose UI Platform API
📄 Summarized by Claude Sonnet 4.5
ComposeView.setContent() - Android Compose UI Platform API
API リファレンスページ(2025年10月時点)
どんなもの?
ComposeViewはJetpack ComposeのUIコンテンツをホストできるAndroid Viewクラス
setContent()メソッドを使用して、Composable関数を提供しUIを構築する
従来のViewベースのアプリにComposeを段階的に導入する際の橋渡し的な役割を果たす
Fragmentや既存のXML Layout内でComposeコンテンツを使用可能にする
先行研究と比べてどこがすごい?
従来のsetContentView()によるXML Layout方式に代わり、宣言的UIを実現
ViewシステムとComposeシステムを同一画面内で共存させることができる相互運用性を提供
RecyclerViewやViewPager2などの既存コンポーネント内でもComposeを利用可能
技術や手法のキモはどこ?
ViewCompositionStrategyによってCompositionの破棄タイミングを制御
デフォルトではViewCompositionStrategy.Defaultが適用され、ComposeViewがウィンドウから切り離されたときに破棄される
Fragment内で使用する場合はViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyedの設定を推奨
Compositionは個別に管理され、各ComposeViewインスタンスが独立したCompositionを保持する
どうやって有効だと検証した?
Android Developersの公式ドキュメントとコードラボで実装例を提供
Fragment内での実装パターン:XMLレイアウトにComposeViewを配置しsetContent()でComposableを設定
プログラマティックな実装パターン:onCreateView()内で直接ComposeViewインスタンスを生成して返却
混在UI実装:TextViewなどの従来のViewとCompose要素を同一レイアウト内に配置
議論はある?
ViewCompositionStrategyの選択を誤ると状態の損失やスクロール位置のリセットなどの問題が発生する可能性がある
FragmentのライフサイクルとCompositionのライフサイクルを適切に同期させる必要がある
完全にComposeベースのアプリではComposeViewは不要で、ComponentActivity.setContent()を直接使用する方が適切
段階的な移行戦略として、新機能はComposeで実装し、既存機能を徐々に移行していくアプローチが推奨されている
#JetpackCompose
#AndroidDevelopment
#ComposeInteroperability
#UIFramework
#AndroidView