Передача предмета, который можно отделить, от несоответствия типов фрагментов - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в kotlin и пытаюсь передать объект из моего адаптера во фрагмент. Но я получаю несоответствие типов в объекте-компаньоне для booklist. Там написано Required: Parceleable Found: List<ResourcesList>?

Я также пытался использовать putParcelableArrayList и putParcelableArray и Serializable, но также с тем же несоответствием типов.

Моя модель данных выглядит так:

@Parcelize
class ResourcesList (val id: Int,
                     val name: String,
                     val content: Contents,
                     val tags: List<Tags>) : Parcelable

@Parcelize
class Contents       (val id: Int,
                     val producers: List<Producers>,
                     val categories: List<Categories>,
                     val isAvailable: Boolean): Parcelable
@Parcelize
class Producers     (val name: String,
                     val role: String): Parcelable
@Parcelize
class Categories    (val id: Int,
                     val name: String): Parcelable

Фрагмент

class SeeAllFragment: Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.see_all_layout, container, false)


        val bookslist = arguments.getParceleable("bookslist")

        return view
    }

    companion object {

        fun newInstance(bookslist: List<ResourcesList>?): SeeAllFragment {

            val args = Bundle()
            args.putParcelable("bookslist", bookslist)
            val fragment = SeeAllFragment()
            fragment.arguments = args
            return fragment
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

для размещения списка в комплекте:

args.putParcelableArrayList("bookslist", bookslist as ArrayList<out Parcelable>?)

для получения списка:

val bookslist = arguments.getParcelableArrayList<ResourcesList>("bookslist")
0 голосов
/ 03 мая 2018

В моем коде я использовал Gson.

companion object {
    const val BOOK_LIST = "bookslist"
    fun getFragment(bookslist: List<ResourcesList>): SeeAllFragment {
        return SeeAllFragment().apply { arguments = Bundle().apply {
            putString(BOOK_LIST, Gson().toJson(bookslist))
        } }
    }
}

Тогда получите такие данные.

val bookslist = Gson().fromJson(arguments?.getString(BOOK_LIST), object : TypeToken<List<ResourcesList>>() {}.type)
...