getParcelable в kotlin не анализирует, чтобы правильно моделировать объект Android - PullRequest
0 голосов
/ 18 октября 2018

Я использую @Parcelize, чтобы сделать класс данных Parcelable как

@Parcelize
data class QuestionBO(val title: String, val options: List<String>, val correctOptionIndex: Int,
                      val dateCreated: Date, val tags: List<String>, val questionType: Int,
                      val userID: String, val userName: String, val totalLikes: Int,
                      val imageUrl: String) : Parcelable {
    constructor() : this("", emptyList(), 1, Date(), emptyList(), 3, ""
            , "", 34, "")
}

И вызывать и передавать данные во фрагмент, как

supportFragmentManager.beginTransaction().add(
                QuestionFragment.newInstance(singleQuestion), "QuestionFragment").commit()

метод newInstance

companion object {
        private const val KEY_QUESTION_BO = "key_question_bo"

        fun newInstance(aQuestion: QuestionBO) = QuestionFragment().apply {
            arguments = Bundle(2).apply {
                putParcelable(KEY_QUESTION_BO, aQuestion)
            }
        }
    }

И в onViewCreated Я получаю его, используя аргументы типа

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        if(arguments != null){
            mQuestionBO = arguments!!.getParcelable<QuestionBO>(KEY_QUESTION_BO) as Nothing?

            /*var bundle = arguments!!.getBundle("bundle")
            bundle.getParcelable<QuestionBO>(KEY_QUESTION_BO)*/
        }
    }

Примечания

Я отлаживаю аргумент, он показывает данные в onViewCreated, но не конвертирует их в QuestionBO

enter image description here

Что не так в данном выражении !!!

arguments!!.getParcelable<QuestionBO>(KEY_QUESTION_BO) as Nothing?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

as Nothing?, который вы используете, является неправильной частью.Вы говорите, что полученный вами объект имеет тип Nothing?, тогда как вы пытаетесь получить QuestionBO?.

Как сказал @shkschneider, замените Nothing? на QuestionBP?, и ваш код будетработать правильно.

0 голосов
/ 18 октября 2018

Во-первых, я почти уверен, что вы должны использовать getParcelable<QuestionBO>(KEY_QUESTION_BO) as QuestionBO?

А затем из того, что я вижу из вашего отладчика, result.mMap.value[0] действительно распознается как QuestionBO объект.

Хорошо выглядит для меня иначе.

...