You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Navigation Component传递Twitter SDK User列表遇Parcelable错误求助

嘿,这个问题我之前也碰到过!核心问题出在Navigation Component对参数类型的处理上——你配置的com.twitter.sdk.android.core.models.User[]会让生成的代码默认用Parcelable数组来传递,但Twitter的User类只实现了Serializable,并没有实现Parcelable,所以putParcelableArray这行代码自然就报错了。

给你两个可行的解决方案,你可以根据自己的需求选:

方案一:直接改用Serializable数组传递

既然User本身是Serializable的,我们只需要在navigation.xml里把参数类型改成Serializable数组就行:

<argument
    android:name="list"
    app:argType="java.io.Serializable[]" />

你在Home Fragment里的跳转代码不用改,还是保持list.toTypedArray()的方式传递。

到了Detail Fragment,获取参数的时候只需要做个类型转换再转成List:

val args = DetailFragmentArgs.fromBundle(requireArguments())
val nonFollowersList = (args.list as Array<User>).toList()

方案二:封装成Serializable容器类(更优雅)

如果觉得直接转数组+类型转换有点别扭,可以自己写一个简单的容器类来装这个列表,同样实现Serializable:

// 放在你的项目包下,比如com.yourapp.models
data class UserListWrapper(val users: List<User>) : Serializable

然后修改navigation.xml里的参数配置:

<argument
    android:name="userListWrapper"
    app:argType="com.yourapp.models.UserListWrapper" />

Home Fragment跳转时,把列表包装一下再传递:

val wrapper = UserListWrapper(nonFollowersList)
val action = HomeFragmentDirections.actionHomeFragmentToDetailFragment(wrapper)
requireView().findNavController().navigate(action)

Detail Fragment里直接拿到容器类再取列表:

val args = DetailFragmentArgs.fromBundle(requireArguments())
val nonFollowersList = args.userListWrapper.users

小提醒

Serializable的序列化效率确实比Parcelable低一些,但如果你的非关注者列表不是特别庞大(比如几千条那种),完全不用担心性能问题——毕竟Twitter的User类本身就已经支持Serializable了,不用我们额外做任何适配。

内容的提问来源于stack exchange,提问作者hanifedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:42:37