小编Gab*_*lie的帖子

Jetpack Compose,使用自定义 Lifecycle/ViewModelStore/SavedStateRegistry Owner 时不会触发重组

我正在尝试创建一个覆盖层并将视图附加到 WindowManager,我已经通过创建一个实现 Lifecycle/ViewModelStore/SavedStateRegistry Owner 的类来设法做到这一点。\n但由于某种原因,每当我尝试显示对话框/更改时以任何方式使用 MutableState 或 MutableStateFlow 重组的 UI 都不会触发。

\n

有没有人尝试过做这样的事情并设法找到触发重组的解决方案?

\n

这就是我尝试创建和插入视图的方式:

\n
@SuppressLint("InflateParams")\nfun showOverlay() {\n    synchronized(lock) {\n        if (overlay != null || overlay?.parent != null) {\n            return\n        }\n        val viewModel = OverlayViewModel(context.applicationContext as Application)\n        var scope: CoroutineScope? = null\n        overlay = ComposeView(context).apply {\n            setContent {\n                Overlay(viewModel)\n            }\n        }\n        drawOverLifecycleOwner = DrawOverLifecycleOwner()\n        drawOverLifecycleOwner?.attachToDecorView(overlay)\n        val params =\n            WindowManager.LayoutParams(\n                WindowManager.LayoutParams.MATCH_PARENT,\n                WindowManager.LayoutParams.MATCH_PARENT,\n                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,\n                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,\n                PixelFormat.TRANSLUCENT\n            )\n        params.gravity = Gravity.TOP or Gravity.START\n        Log.i("ScreenLocker", "Inserting overlay")\n        ContextCompat.getMainExecutor(context).execute {\n …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose compose-recomposition

5
推荐指数
1
解决办法
1326
查看次数