mutableListOf в связку (Kotlin) - PullRequest
0 голосов
/ 13 июля 2020

У меня есть mutableLIst:

var books = mutableListOf<Book>()

модель «Книга»:

data class Book(val title: String, val id: Int)

Мой код:

      button2.setOnClickListener{
        val delFragment = DelFragment()
        val booksforDel = Bundle()
        booksforDel.putStringArrayList("books", books as ArrayList<String>)
        delFragment.setArguments(booksforDel)

        val manager = supportFragmentManager
        delFragment.show(manager,"Delete Book")
    }

во фрагменте я пытаюсь получить данные:

val booksForDelete = getArguments()?.getStringArrayList("books")!!

и получить ошибку:

java .lang.ArrayStoreException: source [0] типа com.example.http_example.model.Book не может быть хранится в целевом массиве типа java .lang.String []

Как отправить данные из «книг» mutableList в Bundle в DialogFragment?

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете реализовать интерфейс Parcelable:

data class Book(val title: String, val id: Int) : Parcelable {
    constructor(source: Parcel) : this(
            source.readString()!!,
            source.readInt()
    )

    override fun describeContents() = 0

    override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
        writeString(title)
        writeInt(id)
    }

    companion object {
        @JvmField
        val CREATOR: Parcelable.Creator<Book> = object : Parcelable.Creator<Book> {
            override fun createFromParcel(source: Parcel): Book = Book(source)
            override fun newArray(size: Int): Array<Book?> = arrayOfNulls(size)
        }
    }
}

И использовать его следующим образом:

var books = mutableListOf<Book>()
val booksforDel = Bundle()
booksforDel.putParcelableArray("books", books.toTypedArray())

Ann для извлечения книг из фрагмента:

val booksForDelete = arguments?.getParcelableArray("books")
...