Android 我们是否可以根据特定的recyclerview项单击通过单个界面传递多种类型的对象(项)

Android 我们是否可以根据特定的recyclerview项单击通过单个界面传递多种类型的对象(项),android,interface,android-recyclerview,onitemclicklistener,Android,Interface,Android Recyclerview,Onitemclicklistener,我有两种不同类型的对象要传输,如地址、用户 我想实现,若我点击用户列表项,然后通过界面传递用户点击项,若我点击地址列表,然后通过界面传递地址点击项 根据注释,您可以使用密封类来实现这一点,代码如下所示: data class Address( val city_name : String?, val address_line_one : String?, val address_line_two : String?, val pin_code: String?) data class 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?)

使用任何实现接口时,您可以检查它是否为Adress或UserI我想我需要添加更多的对象类,所以当对象类增加时,使用when会变得更糟。我会尝试任何方法。你可以使用密封类,地址和用户都会扩展到它,然后在接口实现中,您可以检查类型并使用@mangkool适当地处理它,这是从抽象类或密封类扩展的好方法class@mangkool我没有那么多经验,你能分享一些例子吗?非常感谢你花时间与我分享你的知识。@akshaykondekar没问题,如果这对您有效,请不要忘记将其标记为接受答案class AddressAdapterval addresslist:ArrayList,val itemClickListener:itemClickListener:RecyclerView.Adapter{内部类AddressViewHoldervar视图:视图:RecyclerView.ViewHolderview{fun bindaddress:Data.address,clickListener:ItemClickListener{…更新ui….view.setOnClickListener{clickListener.transferDataaddress}}}当我设置clickListener.transferDataaddress时,它会显示required:Data found:Data.address您不需要专门使用address,只需要使用Data。将您的addresslist更改为数据的arrayList。我认为您在这里的意图与您在问题中提出的不同
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?)
// 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
            }
        }
    }

}