ちょっと面白かったのでメモしておきます。
以下の様の置いてみます
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
App()
}
}
}
}
@Composable
fun App() {
Switch(
checked = false,
onCheckedChange = {}
)
}
そしてチェックをタップして変更しようとしてみます。
変更できません。
理由
これまでの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