如何在另一个活动中访问数据类实例?

时间:2019-03-30 22:09:55

标签: android kotlin instance-variables

我想在我的PlayerDetails.kt活动中创建一个数据类实例,然后稍后可以在另一个活动中访问其数据。

之所以这样做,是因为我不想经常使用Intent.putStringIntent.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实例,并能够在以后的活动中单独访问它们?

1 个答案:

答案 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
)