KotlinのJetpack Composeでボタンを押したとき、GLSurfaceView.Renderer内の関数を呼び出してプロパティを更新する処理を実装しましたが、プロパティが期待通りに更新されない問題が発生しました。
原因
この問題は、AndroidViewで設定したRendererインスタンスと、ボタンのonClickで呼び出すRendererインスタンスが異なっていたために起こっていました。setRenderer(MyRenderer(context))をsetRenderer(myRenderer)に変更することで、Rendererのインスタンスが一致し、プロパティが正しく更新されるようになりました。
MainActivity.tk
@Composable
fun OpenGLView() {
val context = LocalContext.current
val myRenderer = remember { MyRenderer(context) }
Box(modifier = Modifier.fillMaxSize()) {
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = {
GLSurfaceView(it).apply {
//setRenderer(MyRenderer(context)) まちがい
setRenderer(myRenderer)
}
}
)
:
Button(onClick = {
myRenderer.setDate(confirmedYear,confirmedMonth,confirmedDay)
text = myRenderer.getWYearString()
}) {
Text("OK")
}
}
}
MyRenderer.tk
class MyRenderer(private val context: Context) : GLSurfaceView.Renderer {
:
}