我想在我的PlayerDetails.kt
活动中创建一个数据类实例,然后稍后可以在另一个活动中访问其数据。
之所以这样做,是因为我不想经常使用Intent.putString
,Intent.putInt
或Shared Preferences在活动之间不断传递数据,因为该数据仅对当前会话有用。我只想随时随地按需检索数据。
PlayerDetails.kt
class PlayerDetails : AppCompatActivity() {
...
val player1 = Player(name="james", age=23, gender="male")
val player2 = Player(name="sophie", age=38, gender="female")
}
Player.kt
data class Player (
val name: String,
val age: Int,
val gender: String
)
由于我有多个Player,是否可以在Player
中创建多个PlayerDetails.kt
实例,并能够在以后的活动中单独访问它们?
答案 0 :(得分:2)
之所以这样做,是因为我不想在使用Intent.putString,Intent.putInt或Shared Preferences的活动之间不断传递数据,因为该数据仅对当前会话有用。
听起来你想也要吃蛋糕;这是一个问题,因为如果您不使用Intent捆绑软件,并且不使用磁盘持久性;那么您仍然至少需要实现BaseActivity.onSaveInstanceState()
,否则您的可怜用户将在一段时间后返回您的应用时丢失其数据(状态);)
想象一下,您在Activity1中设置了字段,然后转到Activity3,然后接听一个需要20分钟的电话。在此期间,Android终止了我的应用程序,我从电话中回来,该应用程序从Activity3从头开始,而我原本在Activity1中设置但从未以任何方式保存的内容现在是null
或{{ 1}}或""
。不太好的UX,尤其是当它也导致崩溃时。
针对您的情况的简单解决方案是,不必每次都手动分解0
,而只需使用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
)