可打包对象Kotlin的可打包对象列表

时间:2020-01-18 19:37:39

标签: android kotlin parcelable

我有一个不可分割的团队班级

@Parcelize
class Team(var name: String, var teamMembers: List<String>, var id: UUID): Parcelable

我有一项服务,该服务会返回(当前已硬编码的)团队列表:

@Module 
class TeamInfoModule @Inject constructor(): ITeamInfoModule {

    @Provides
    override fun getAllTeamData(): List<Team> { ... }

}

我希望能够将这样的团队列表传递给活动中的Fragment:

class MainActivity: AppCompatActivity() {

    @Inject
    lateinit var teamInfoModule: TeamInfoModule;

    lateinit var team: Team;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        DaggerServiceModuleComponent.create().inject(this)

        val bundle = Bundle()
        val teamArrayList: List<Team> = this.teamInfoModule.getAllTeamData()
        val homeFragment = HomeFragment()

        bundle.putParcelable("teamData", teamArrayList)
        homeFragment.arguments = bundle

    }
}

这将引发错误:Type Mismatch. Required: Parcelable? Found: List<Team>.

我知道可以将一个团队传递给我的Fragment,因为它不会引发错误。

我的问题是,有没有找到一个可以以某种方式将列表序列化为Parcelable的实用程序?我曾想过创建一个自定义的TeamListClass,它也实现@Parcelize,但我想在这里问一下,然后再编写不需要的代码。也许类似于JS的Array.map()的东西,它将每个Parcelable传递到包中?

2 个答案:

答案 0 :(得分:3)

您应该使用:

bundle.putParcelableArrayList("teamData", ArrayList(teamArrayList))

答案 1 :(得分:2)

使用arrayList将列表转换为ArrayList(teamArrayList)

 bundle.putParcelableArrayList("teamData", ArrayList(teamArrayList))