viewModelにInt変数(viewModel.stateOrientation)を作成してデバイスが回転したら、その数値をviewModelのInt変数に保存する。
TextView1をonCreate()で表示。
TextView2をonConfigurationChanged()で表示。
TextView1、TextView2には、viewModel.stateOrientation.toString()を書き込む。
エミュレータのデバイス回転アイコンで回転させると
onCreate()で表示させている文字は初期値(0)のまま変化しない。
onConfigurationChanged()で表示させている文字は縦(1)、横(2)と切り替わる。
viewModelの変数の値はActivityの再描画でも保持されるので
viewModel.stateOrientation
の数値は同じ数値であるはず。
なのに違う数値が表示されるのはなぜ?
弱った。エミュレータの問題かな…。
数値を保存していて取り出し場所で数値が異なる状況ではプログラムは無理。
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView = findViewById<TextView>(R.id.message)
textView.setText(viewModel.stateOrientation.toString()) // 初期値 0 のみ表示
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
viewModel.stateOrientation = newConfig.orientation
val textView = findViewById<TextView>(R.id.message2)
textView.setText(viewModel.stateOrientation.toString()) // 1⇔2 切り替わって表示
}