Я делаю это, потому что не хочу постоянно передавать данные между действиями, используя Intent.putString, Intent.putInt или Shared Preferences, так как данные полезны только для текущего сеанса.
Ты говоришь так, будто хочешь съесть свой пирог и съесть его;что является проблемой, потому что если вы не используете Intent bundle и не используете постоянство диска;тогда вам по крайней мере потребуется реализовать BaseActivity.onSaveInstanceState()
, иначе ваш бедный пользователь потеряет свои данные (состояние), когда через некоторое время вернется в ваше приложение;)
Представьте себе, вы задали поля в Activity1Я перехожу к Activity3, затем получаю телефонный звонок, который занимает 20 минут.Тем временем Android завершает работу моего приложения, я возвращаюсь с телефонного звонка, приложение запускается с нуля на Activity3, и материал, который я предположительно установил в Activity1, но никогда не сохранял каким-либо образом, теперь null
или ""
или0
.Не очень хороший UX, особенно когда он вызывает сбои.
Простое решение для вашего сценария состоит в том, чтобы вместо разложения вашего Player
вручную каждый раз, просто используйте @Parcelize
.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}
Тогда
@Parcelize data class Player: Parcelable (
val name: String,
val age: Int,
val gender: String
)
И
// inline fun <reified T: Activity> Activity.intentFor(builder: Intent.() -> Unit) {
// return Intent(this, T::class.java).apply(builder)
// }
startActivity(intentFor<OtherActivity>() {
putParcelableExtra("player", player)
})
val player = intent.getParcelableExtra("player")