У меня есть три вспомогательных расширения:
fun <T, K : BaseViewHolder> BaseQuickAdapter<T, K>.onItemClick(
onItemClick: (adapter: BaseQuickAdapter<*, *>, position: Int, item: T) -> Unit
): BaseQuickAdapter<T, K> {
setOnItemClickListener { adapter, _, position ->
onItemClick(adapter, position, data[position])
}
return this
}
fun <T, K : BaseViewHolder> BaseQuickAdapter<T, K>.onItemClick(
onItemClick: (position: Int, item: T) -> Unit
): BaseQuickAdapter<T, K> =
onItemClick { _, position, item -> onItemClick(position, item) }
fun <T, K : BaseViewHolder> BaseQuickAdapter<T, K>.onItemClick(
onItemClick: (item: T) -> Unit
): BaseQuickAdapter<T, K> =
onItemClick { _, item -> onItemClick(item) }
каждая onItemClick
функция принимает на один аргумент меньше, чем предыдущий
при вызове:
onItemClick { item ->
}
все работает нормально, как и ожидалось, и последний метод вызывается.
, но когда я удаляю явное item
объявление, попробуйте использовать it
onItemClick {
it.doStuff()
}
Я получаю эту ошибку:
Cannot choose among the following candidates without completing type inference:
public fun <T, K : BaseViewHolder> BaseQuickAdapter<T#1 (type parameter of humazed.github.com.kotlinandroidutils.simpleAdapter), KBaseViewHolder>.onItemClick(onItemClick: (adapter: BaseQuickAdapter<*, *>, position: Int, item: T#1) → Unit): BaseQuickAdapter<T#1, KBaseViewHolder> defined in humazed.github.com.kotlinandroidutils
public fun <T, K : BaseViewHolder> BaseQuickAdapter<T#1, KBaseViewHolder>.onItemClick(onItemClick: (item: T#1) → Unit): BaseQuickAdapter<T#1, KBaseViewHolder> defined in humazed.github.com.kotlinandroidutils
public fun <T, K : BaseViewHolder> BaseQuickAdapter<T#1, KBaseViewHolder>.onItemClick(onItemClick: (position: Int, item: T#1) → Unit): BaseQuickAdapter<T#1, KBaseViewHolder> defined in humazed.github.com.kotlinandroidutils
полный код на GitHub
Я знаю, что есть подобные вопросы по SOF, но они не совпадают с моими, и ответы не применяютсяздесь.