Могу ли я получитьParcelableExtra ленивым (делегат) - PullRequest
0 голосов
/ 24 марта 2020

Я просто хочу убедиться, могу ли я получитьParcelableExtra от lazy (делегата) в kotlin?

Я пытался это сделать, но у меня возникла ошибка, есть ли другой способ?

класс модели:

@Parcelize
data class Branch(
    val branch_code: String,
    val branch_name: String,
    val total_warehouse: Int,
    val id: Int
): Parcelable

класс активности A:

BranchAdapter(binding.etSearch, {
    openActivity<OverViewActivity> {
        putExtra(ParseExtra.OBJECT, it)
    }
})

класс активности B:

private val dataBranch : Branch by lazy {
   intent.getParcelableExtra(ParseExtra.OBJECT)!!
}

ОШИБКА

..\OverViewActivity.kt: (49, 40): Type inference failed. Please try to specify type arguments explicitly.
..\OverViewActivity.kt: (49, 45): Type mismatch: inferred type is () -> ??? but () -> Branch was expected
..\OverViewActivity.kt: (50, 16): Type inference failed: Not enough information to infer parameter T in fun <T : Parcelable!> getParcelableExtra(p0: String!): T!

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете создать расширение для Activity, чтобы получить дополнительный пакет

inline fun <reified T : Parcelable> Activity.getParcelableExtra(key: String) =
    lazy { intent.getParcelableExtra<T>(key) }

, а затем использовать его как

private val dataBranch: Branch by getParcelableExtra(ParseExtra.OBJECT)

или

private val dataBranch by getParcelableExtra<Branch>(ParseExtra.OBJECT)
0 голосов
/ 24 марта 2020

Вы должны явно указать аргументы типа. Попробуйте так:

private val dataBranch : Branch by lazy {
   intent.getParcelableExtra<Branch>(ParseExtra.OBJECT)!!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...