タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【kotlin】 不可解な現象が発生。

2024-02-21 02:38:45 | Android studio 日記

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 切り替わって表示

    }

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

【kotlin】 getOrientation()失敗

2024-02-21 00:37:22 | Android studio 日記

override fun onCreate()の中で

var ori = resources.configuration.orientation

これを実行すると初回のみ正常な値を返します。
回転して再描画されたときは変化せず初回と同じ値が返されます。

viewModel にメソッドを作り、任意のタイミングで

Activity.resources.configuration.orientation

を返させても初回のみ正常値でその後は画面の状態とは関係なく初回値と同じ値が戻ってきます。

 

override fun onConfigurationChanged()の中で実行した場合はその時点のスクリーンの状態を正常に返します。

 

override fun onConfigurationChanged(){}でLiveDataのプロパティを変更させるのが良いのかも…。
screenTypeとは別のプロパティオンリーを作って利用しようか。

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする