在Fragment中使用Jetpack Compose出现ConstraintLayout找不到ViewTreeLifecycleOwner报错
错误原因
ComposeView加载时需要从所在的视图树获取ViewTreeLifecycleOwner、ViewTreeViewModelStoreOwner等核心生命周期载体,你当前使用的依赖版本未自动完成这些载体的注入,因此抛出异常。
解决方案
有两种可直接落地的修复方式,二选一即可:
方式一:手动注入生命周期载体(无需修改依赖,最快生效)
在Fragment中创建ComposeView时,手动为其设置所需的生命周期相关载体,修改后的Fragment代码如下:
class WelcomeFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return ComposeView(requireContext()).apply { // 新增以下三行代码,手动注入所需载体 ViewTreeLifecycleOwner.set(this, viewLifecycleOwner) ViewTreeViewModelStoreOwner.set(this, viewLifecycleOwner) ViewTreeSavedStateRegistryOwner.set(this, viewLifecycleOwner) setViewCompositionStrategy( DisposeOnLifecycleDestroyed(viewLifecycleOwner) ) setContent { MaterialTheme { Text(text = "Welcome to App") } } } } }
方式二:升级核心依赖版本(一劳永逸解决同类问题)
将你的以下核心依赖升级到指定版本及以上,高版本已经默认处理了视图树的生命周期载体注入逻辑:
FragmentVersion = '1.4.0' APP_COMPAT_VERSION = '1.4.0' ACTIVITY_KTX_VERSION = '1.4.0'
内容的提问来源于stack exchange,提问作者FarshidABZ
相关产品推荐
相关产品推荐

