Можем ли мы передать несколько типов объектов (элементов) через единый интерфейс в соответствии с конкретным щелчком элемента recyclerview - PullRequest
0 голосов
/ 08 мая 2020
interface ItemClickListener {
fun transferData(data : **I want to add any type item as per recyclerview click**)}

У меня есть 2 разных типа объектов для передачи, например Адрес , Пользователь .

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?)

Я хочу добиться этого, если я нажму на Пользователь элемент списка, затем пропустите элемент, выбранный пользователем, через интерфейс, и если я нажму на список Адрес , то пропущу элемент с выбранным адресом через интерфейс.

1 Ответ

1 голос
/ 08 мая 2020

Согласно комментарию, вы можете использовать запечатанный класс для этого, код будет примерно таким:

// 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
            }
        }
    }

}
...