0
0

More than 1 year has passed since last update.

[Jetpack Compose] 再コンポジションされているのにUIが更新されない

Last updated at Posted at 2023-01-02

概要

Jetpack Composeを使用して画面を作成した際、コード上は再コンポジションされているのに、端末上のUIが更新されないという事象に遭遇しました。

MainActivity.kt
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val counterState = remember { mutableStateOf(0) }
            Counter(
                count = counterState.value,
                updateCount = { newCount ->
                    counterState.value = newCount
                }
            )
        }
    }
}

@Composable
fun Counter(count: Int, updateCount: (Int) -> Unit) {
    Button(
        onClick = { updateCount(count + 1) },
        colors = ButtonDefaults.buttonColors(
            contentColor = if (count > 5) Color.Green else Color.White
        )
    ) {
        Text("I've been clicked $count times")
    }
}

上記コードを実行してボタンを押すると、ボタンのテキストが「~ 1 times」、「~ 2 times」と増えていくはずです。
20230102-215852.png
しかし実際は、ボタンを押すたびに Counter コンポーザブルは呼び出されるものの、画面のボタンテキストが「I've been clicked 0 times」から変わりませんでした。
Counter コンポーザブルが呼び出されることは、ログを仕込んで確認しています。

実行環境

端末:Google Pixel 4a(5G)
OSバージョン:Android13

app/build.gradle
compose_version = '1.3.1'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"

修正方法

Compose UIのバージョンを 1.4.0-alpha02 以上に上げるか、 1.2.1 以下に下げてください。
1.4.0 まで上げることを修正方法としていないのは、現時点で最新のバージョンが 1.4.0-alpha03 だからです。

原因

今回の事象が発生するバージョンを調べました。

  • 1.2.1 → 発生しない
  • 1.3.0 → 発生する
  • 1.3.1 → 発生する
  • 1.3.2 → 発生する
  • 1.4.0-alpha01 → 発生する
  • 1.4.0-alpha02 → 発生しない
  • 1.4.0-alpha03 → 発生しない

つまりCompose UIの 1.3.0 で今回の事象が発生するような対応がされ、 1.4.0-alpha02 で修正されたと推測できますが、リリースノート を見ても分かりませんでした...。
調べてもこのような事象に遭遇している人が見つからなかったので、何か他ライブラリのバージョンとの組み合わせによるものかもしれません。
誰か分かる方いたら教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0