Я создаю приложение калькулятора.Всякий раз, когда пользователь меняет ориентацию устройства, текущая активность приложения уничтожается и воссоздается.Таким образом, чтобы решить эту проблему (т.е. получить все данные обратно), я сделал это:
- Объявление некоторых переменных
private const val STATE_OPERAND1 = "data"
private const val STATE_PENDING_OPERATION = "PENDING_OPERATION"
private const val STATE_OPERAND1_STORED = "data"
Переопределение функции «onSaveInstanceState»
override fun onSaveInstanceState(outState: Bundle)
super.onSaveInstanceState(outState)
if (operand1 != null) {
outState.putDouble(STATE_OPERAND1, operand1!!)
outState.putBoolean(STATE_OPERAND1_STORED, true)
}
outState.putString(STATE_PENDING_OPERATION, pendingOperation)
}
Переопределение функции 'onRestoreInstanceState'
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
operand1 = if (savedInstanceState.getBoolean(STATE_OPERAND1_STORED, false))
savedInstanceState.getDouble(STATE_OPERAND1)
else
null
result.setText(operand1.toString()) // Marked Line 1
pendingOperation = savedInstanceState.getString(STATE_PENDING_OPERATION)
displayOperation.text = pendingOperation
}
'Помеченная строка 1' в третьем коде не требуется, поэтому я добавил, что обнаружил ошибку.В этом коде тестовое поле result очищает предыдущий текст и содержит введенный текст 'null'.
Однако, когда я изменил объявление в 1 с private const val STATE_OPERAND1 = "data"
на private const val STATE_OPERAND1 = "STATE_OPERAND1"
Текстовое поле result показывало текст, который должен был быть, и все работало правильно.Приложение работало до тех пор, пока все три объявления в 1-м коде были разными.Почему это так?