我在这条推文https://twitter.com/AndroidDev/status/972502799496790018
中看到了一个有趣的观察者实现override fun onBindViewHolder(holder: SealedAdapterViewHolder, position: Int) {
return when (holder) {
is HeaderHolder -> holder.displayHeader(items[position])
is DetailsHolder -> holder.displayDetails(items[position])
}
}
不幸的是,我无法弄清楚如何实施thouse持有者。我没有找到任何这个技巧的例子。
在我的视图中,我必须扩展RecyclerView.ViewHolder,我必须扩展密封类,以便我可以在" when子句"中使用它。不允许多次吸入。
那么它是否可能,如果它是如何呢?
P.S。
原作者写道:
您还可以在RecyclerView适配器中使用密封类。他们是一个 完美适合ViewHolders - 提供一组干净的类型 明确地对每个持有人。用作表达式,编译器将 如果所有类型都不匹配,则会出错。
答案 0 :(得分:4)
这样的事情:
sealed class SealedAdapterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
class HeaderHolder(view: View) : SealedAdapterViewHolder(view)
class DetailsHolder(view: View) : SealedAdapterViewHolder(view)
}
答案 1 :(得分:1)
它在线程的第一篇文章中。
fun foo(holder : SealedAdapterViewHolder){
when (holder) {
is HeaderHolder -> holder.displayHeader(items[position])
is DetailsHolder -> holder.displayDetails(items[position])
}
}
sealed class SealedAdapterViewHolder(view: View) : RecyclerView.ViewHolder(view)
data class HeaderHolder(val view: View): SealedAdapterViewHolder(view){
fun displayHeader(...){}
}
data class DetailsHolder(val view: View): SealedAdapterViewHolder(view){
fun displayDetails(...){}
}