В файле 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
}
Добавьте это в свою активность в манифесте
android:configChanges = "orientation|screenSize"
Таким образом, ваша активность не будет перезапущена автоматически.
В 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"))
}
Большое спасибо за эту большую помощь. Много ценю.
Рад помочь вам.
Это не отвечает на вопрос, а просто указывает на то, как его обойти.