撰写互操作错误? AndroidView 不会在 Android 25 及更低版本上重绘

时间:2021-01-25 19:05:02

标签: android android-jetpack-compose

我尝试使用 Compose 实现一个屏幕,但我有一个自定义的 Android 视图,目前还不想在 Compose 中重新实现。把它想象成一个棋盘(但它是用于围棋游戏的)。我有以下代码:

            val context = AmbientContext.current
            val boardView = remember {
                BoardView(context).apply {
                    onTapMove = { listener(BoardCellHovered(it)) }
                    onTapUp = { listener(BoardCellTapped(it)) }
                    drawCoordinates = true
                    drawMarks = true
                    drawLastMove = true
                }
            }
            AndroidView({ boardView },
                    modifier = Modifier
                            .padding(12.dp)
                            .shadow(6.dp, MaterialTheme.shapes.large)
            ) { view ->
                view.apply {
                    boardSize = state.position?.boardSize ?: 9
                    position = state.position
                    isInteractive = state.boardInteractive
                    showCandidateMove(state.hoveredCell, StoneType.BLACK)
                }
            }

最后一行触发无效。这在 Android 29 上运行良好,但如果我在 Android 25(或更低版本)模拟器中尝试,视图将被绘制 ONCE 然后永远不会被重绘,即使更新块确实被调用。

是否有解决此问题的方法?

完整代码可在 https://github.com/acristescu/OnlineGo/blob/9630a61a00e84c5a455bf230c406b1914da4c9b5/app/src/main/java/io/zenandroid/onlinego/ui/screens/tutorial/TutorialFragment.kt

0 个答案:

没有答案