Как использовать onSavedInstanceState и onRestoreInstanceState для просмотра изображений, индикатора выполнения и кнопки в Kotlin?

В файле layout.xml содержатся TextView, ImageView и Progressbar с идентификаторами tv_text, iv_image и pb_progressbar соответственно. При повороте экрана данные теряются, как восстановить их состояние при повороте экрана?

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("question", tv_text.text.toString())
    outState.putString("image", iv_image.toString())
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val question = savedInstanceState.getString("question")
    tv_text.text = question
    val image = savedInstanceState.getString("image")
    iv_image.toString() = image
}
1
0
159
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавьте это в свою активность в манифесте

android:configChanges = "orientation|screenSize"

Таким образом, ваша активность не будет перезапущена автоматически.

Это не отвечает на вопрос, а просто указывает на то, как его обойти.

Ridcully 12.12.2020 06:06
Ответ принят как подходящий

В Android при изменении конфигурации состояние ProgressBar сохраняется/восстанавливается автоматически, поэтому вам необходимо сохранить/восстановить состояние TextView и ImageView.

Решение

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)

    // Save state of TextView
    val question = tv_text.text.toString()
    outState.putString("question", question)

    // Save state of ImageView
    val image = iv_image.drawable.toBitmap(iv_image.width,
            iv_image.height,
            Bitmap.Config.RGB_565)
    outState.putParcelable("image", image)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)

    // Restore the state of TextView
    tv_text.text = savedInstanceState.getString("question")

    // Restore the state of ImageView
    iv_image.setImageBitmap(savedInstanceState.getParcelable("image"))
}

Большое спасибо за эту большую помощь. Много ценю.

prayas 12.12.2020 20:00

Рад помочь вам.

Son Truong 13.12.2020 01:50

Другие вопросы по теме