LoginSignup
6
1

More than 3 years have passed since last update.

ComposeのSwitch/Checkboxの状態管理

Last updated at Posted at 2019-10-29

ちょっと面白かったのでメモしておきます。
以下の様の置いてみます
image.png

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MaterialTheme {
                App()
            }
        }
    }
}

@Composable
fun App() {
    Switch(
        checked = false,
        onCheckedChange = {}
    )
}

そしてチェックをタップして変更しようとしてみます。

check.gif

変更できません。

理由

これまでのAndroidのCheckboxではWidget側に状態がある形になっていましたが、これからは自分で管理したデータを利用する必要があります(そのほうが嬉しい)
TextFieldがまだクラッシュして使えなかったのですが、おそらくテキストの入力などもそうなるのではと思っています。
(確かI/O 2019で説明があった気がします)

解決策

以下のように管理するインスタンスを作ってあげて、そこの値を変更することで、変更することができます。
@Modelをつけることで、プロパティがComposeから観測可能になります。
設計によりそうですが、実際のアプリではViewModelなどに持つ感じになるかもしれません。

@Composable
fun App() {
    Switch(
        checked = UiModel.checked,
        onCheckedChange = { checked -> UiModel.checked = checked }
    )
}

@Model
object UiModel {
    var checked: Boolean = false

checkedchange.gif

6
1
1

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
6
1