【问题标题】:How to implement ViewHolder using sealed class in Kotlin如何在 Kotlin 中使用密封类实现 ViewHolder
【发布时间】:2018-03-12 12:06:02
【问题描述】:

我在这条推文https://twitter.com/AndroidDev/status/972502799496790018中看到了一个有趣的viewholder实现

override fun onBindViewHolder(holder: SealedAdapterViewHolder, position: Int) {
  return when (holder) {
    is HeaderHolder -> holder.displayHeader(items[position])
    is DetailsHolder -> holder.displayDetails(items[position])
  }
}

不幸的是,我不知道如何实现 thouse holder。而且我没有找到任何这种技巧的例子。

在我的视图中,我必须扩展 RecyclerView.ViewHolder 并且我必须扩展密封类,以便我可以在“when 子句”中使用它。不允许多重继承。

那么有可能吗?如果是,那又如何?

附言

原作者这样写:

您还可以在 RecyclerView 适配器中使用密封类。他们是一个 非常适合 ViewHolders - 有一组干净的类型可供调度 明确地向每个持有人。用作表达式,编译器将 如果所有类型都不匹配,则会出错。

【问题讨论】:

标签: android android-recyclerview kotlin sealed


【解决方案1】:

类似这样的:

sealed class SealedAdapterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    class HeaderHolder(view: View) : SealedAdapterViewHolder(view)

    class DetailsHolder(view: View) : SealedAdapterViewHolder(view)
}

【讨论】:

    【解决方案2】:

    它在线程的第一篇文章中。

    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(...){}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多