как предотвратить потерю данных при нажатии кнопки назад - PullRequest
0 голосов
/ 05 февраля 2020

Код MainActivity

class MainActivity : AppCompatActivity() {
var number=0

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    if(savedInstanceState!=null){
     number=savedInstanceState.getInt("Number",number)
    }

    findViewById<Button>(R.id.button).setOnClickListener{
        number +=5
        findViewById<TextView>(R.id.textView).text="$number"

    }





}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putInt("Number",number)
    Log.i("MainActivity","Saved Instance Called")
}

}

См. Когда я запускаю приложение и нажимаю кнопку возврата, данные номера не восстанавливаются, однако, когда я нажимаю данные кнопки домой восстановлены.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Если вы нажмете кнопку «Домой», ваше приложение перейдет в фоновый режим, а Activity останется в живых (но будет приостановлено). В любой момент времени система может уничтожить ее, чтобы освободить память и сохранить только набор состояний сохранения, созданный onSaveInstanceState. Затем этот пакет передается в onCreate как savedInstanceState, когда вы возвращаетесь в свое приложение.

Однако, когда вы нажимаете кнопку «Назад», ваше действие заканчивается, и приложение закрывается. В этом случае не будет создаваться состояние сохранения, поэтому, если вы хотите сохранить значение number, вы должны сохранить его в постоянном хранилище, таком как настройки, база данных, файл и т. Д. c. (в зависимости от варианта использования).

1 голос
/ 05 февраля 2020

Вы можете просто переопределить метод onSaveInstanceState (). Для более подробной информации перейдите по ссылке . Или же вы можете переопределить метод onBackPressed, сохранить значение Number и затем снова получить его в onResume

...