我们可以根据特定的 recyclerview 项目点击通过单个界面传递多种类型的对象(项目)吗
Posted
技术标签:
【中文标题】我们可以根据特定的 recyclerview 项目点击通过单个界面传递多种类型的对象(项目)吗【英文标题】:Can we pass multiple types of object(item) through single interface as per particular recyclerview item click 【发布时间】:2020-08-24 03:18:39 【问题描述】:interface ItemClickListener
fun transferData(data : **I want to add any type item as per recyclerview click**)
我有 2 种不同类型的对象要传输,例如 Address、User。
data class Address(
val city_name : String?,
val address_line_one : String?,
val address_line_two : String?,
val pin_code: String?)
data class User(
val name : String?,
val age: Int?,
val gender: String?)
我想实现这一点,如果我点击 User 列表项然后通过界面传递用户点击的项目,如果我点击 Address 列表然后通过界面传递地址点击的项目.
【问题讨论】:
使用 Any 并且当你实现接口时你可以检查它是地址还是用户 我想我需要添加更多的对象类,所以当对象类增加时使用 when 会变得更糟。我会尝试任何。 你可以使用sealed类,Address & User都会扩展到它,之后在接口实现中可以检查类型并适当处理 同意@mangkool 你应该从抽象类或密封类扩展的好方法 @mangkool 我不是很有经验,你可以分享任何示例代码 【参考方案1】:根据评论,您可以使用密封类来实现这一点,代码将是这样的:
// the sealed class
sealed class Data
data class Address(
val city_name : String?,
val address_line_one : String?,
val address_line_two : String?,
val pin_code: String?) : Data()
data class User(
val name : String?,
val age: Int?,
val gender: String?): Data()
// interface
interface ItemClickListener
fun transferData(data : Data)
// implementation, this could be in your activity/fragment
class Try: ItemClickListener
override fun transferData(data: Data)
when(data)
is Data.Address ->
// handle when data is address
is Data.User ->
// handle when data is User
【讨论】:
非常感谢您抽出宝贵时间与我分享您的知识。 @akshaykondekar 没问题,如果这对您有用,请不要忘记将其标记为已接受的答案 class AddressAdapter(val addresslist : ArrayList以上是关于我们可以根据特定的 recyclerview 项目点击通过单个界面传递多种类型的对象(项目)吗的主要内容,如果未能解决你的问题,请参考以下文章
如何更新 RecyclerView 中某个项目的特定 TextView?
RecyclerView - 如何平滑滚动到嵌套滚动视图内某个位置的项目顶部?