alpha 12
から直ってない
beta02
で修正されました。更新手順は、
app/build.gradle
のKotlinバージョン、Composeのバージョンを以下のように変更し、
Composeのバージョンを上げて、
Fragment
、AppCompat
のバージョンを1.3
以上にすればこの問題は修正できます。
本題
BottomSheetDialogFragment
のonCreateView
の返り値としてComposeView()
を使うとエラーが出る問題
環境
name | value |
---|
Compose | 1.0.0 Beta 1 |
なんで?
ViewTreeLifecycleOwner
っていうView
からActivity/Fragment
のライフライクルを取得できるやつがあるんですけど、
親Viewを指定してViewTreeLifecycleOwner.get()
を呼ぶとなぜかnullが返ってくる
解決方法
お好きな方をどうぞ
ViewTreeLifecycleOwner
(とRecomposer
)を指定する
androidx.fragment
をスナップショット版にする
ViewTreeLifecycleOwner
を指定する
Compose
で使ってるRecomposer
を作るのにViewTreeLifecycleOwner
が必要だった模様。
というわけでRecomposer
を作って渡してあげる必要があります
ViewTreeLifecycleOwner.set()
の第二引数はActivity
の場合はActivity
を(this)、
Fragment
の場合はviewLifecycleOwner
を渡してあげてください
Dialog
でComposeView
を使う場合はViewTreeSavedStateRegistryOwner
の指定も必要かも
Fragmentをスナップショット版にする
ついさっき知ったんですけど、build.gradle
からallprojects
が消滅してた。(gradleが6.8になった影響?)
代替として、settings.gradle
にdependencyResolutionManagement
が追加された模様
allprojectがある場合
あとはapp
フォルダにあるbuild.gradle
を開いて、androidx.fragment
をアップデートします
dependencyResolutionManagementの場合
settings.gradle
を開いて書き足す
あとはapp
フォルダにあるbuild.gradle
を開いて、androidx.fragment
をアップデートします
おわりに
dependencyResolutionManagement ってなに
あとソースコード置いておきます
https://github.com/takusan23/BottomFragmentComposeView
参考にしました
https://issuetracker.google.com/issues/180691023