【问题标题】:Setup margin/padding between different adapters in ConcatAdapter Android在 ConcatAdapter Android 中设置不同适配器之间的边距/填充
【发布时间】:2021-07-29 21:54:50
【问题描述】:

是否可以在ConcatAdapter 中的不同适配器之间设置空格(边距/填充)?我只有一个简单的代码示例,如下所示,但根据设计,我必须在不同适配器之间准确添加边距(不是一个适配器中的支架项目)。实现这一目标的最佳方法是什么?

val firstAdapter: FirstAdapter = …
val secondAdapter: SecondAdapter = …
val thirdAdapter: ThirdAdapter = …
val concatAdapter = ConcatAdapter(firstAdapter, secondAdapter, thirdAdapter)

recyclerView.adapter = concatAdapter

【问题讨论】:

  • 将 emptySpaceAdapter 添加到那里。
  • 可能是可能的解决方案之一,但绝对不是最好的。
  • 你解决了吗?
  • 我已经像@pop 建议的那样解决了这个问题(我认为,这应该是解决问题的方法):只需在此处添加 emptySpaceAdapter(或持有人,如果你只有一个适配器)。

标签: android android-recyclerview android-concatadapter


【解决方案1】:

我设法做到了这样的事情:

class EmptySpaceAdapter(private val context: Context, private val height: Int) : RecyclerView.Adapter<BaseViewHolder<*>>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
    val view = View(context)
    view.layoutParams = ViewGroup.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, height)
    return EmptySpaceViewHolder(view)
}

override fun getItemCount() = 1

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
    when (holder) {
        is EmptySpaceViewHolder -> holder.bind(true, position)
        else -> throw IllegalArgumentException("No view holder to show this data, did you forgot to add it to the onBindViewHolder?")
    }
}

inner class EmptySpaceViewHolder(itemView: View) : BaseViewHolder<Boolean>(itemView) {
    override fun bind(item: Boolean, position: Int) {
        Timber.d("onBind empty space")
    }
  }
}

ViewHolder:

abstract class BaseViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
    abstract fun bind(item: T, position: Int)
}

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 2014-11-12
    • 2011-03-14
    • 2011-03-04
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多