Skip to content

Instantly share code, notes, and snippets.

@Diolor
Last active May 1, 2020 23:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Diolor/a8058367e7c066eaac5511eb85e47c7b to your computer and use it in GitHub Desktop.
Save Diolor/a8058367e7c066eaac5511eb85e47c7b to your computer and use it in GitHub Desktop.
class JobsListAdapter : ListAdapter<JobListItem, JobViewHolder>() {
override fun getItemViewType(position: Int): Int {
return getItem(position).ordinal()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): JobViewHolder {
return when (viewType) {
Header.ordinal() -> HeaderViewHolder(...)
JobItem.ordinal() -> JobViewHolder(...)
else -> throw IllegalStateException()
}
}
}
sealed class JobListItem {
object Header : JobListItem()
data class JobItem(val payload: Payload) : JobListItem(){
companion object
}
}
inline fun <reified T : Any> T.ordinal(): Int {
if (T::class.isSealed) {
return T::class.java.classes.indexOfFirst { sub -> sub == javaClass }
}
val klass = if (T::class.isCompanion) {
javaClass.declaringClass
} else {
javaClass
}
return klass.superclass?.classes?.indexOfFirst { it == klass } ?: -1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment