You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个RecyclerView共用同一Adapter时如何在onBind中识别所属实例

实现方案

不要在ViewHolder中做复杂的反向归属判断,优先用低耦合的实现方式:

方案1:构造Adapter时传入样式参数(推荐)

不要给两个RecyclerView复用同一个Adapter实例,分别初始化Adapter时传入对应需要的文字颜色即可,逻辑最清晰无额外判断开销。

  • 首先修改Adapter构造,增加颜色入参:
class CommonAdapter(
    private val itemTextColor: Int,
    private val data: List<String>
) : RecyclerView.Adapter<CommonAdapter.ItemViewHolder>() {

    inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val contentTv: TextView = itemView.findViewById(R.id.item_tv)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        holder.contentTv.text = data[position]
        // 直接使用构造传入的颜色设置,无需判断当前item归属
        holder.contentTv.setTextColor(itemTextColor)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.common_item_layout, parent, false)
        return ItemViewHolder(view)
    }

    override fun getItemCount(): Int = data.size
}
  • 给两个RecyclerView分别绑定对应配置的Adapter实例:
// recyclerOne绑定传黑色
recyclerOne.adapter = CommonAdapter(
    itemTextColor = Color.BLACK,
    data = yourDataList
)
// recyclerTwo绑定传蓝色
recyclerTwo.adapter = CommonAdapter(
    itemTextColor = Color.BLUE,
    data = yourDataList
)

方案2:强制共用单Adapter实例时,通过父容器ID判断

如果业务场景必须让两个RecyclerView共用同一个Adapter对象,可以在onBindViewHolder中通过itemView的父容器溯源,匹配RecyclerView的ID做区分:

override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
    holder.contentTv.text = data[position]
    // 向上遍历找到当前item所属的RecyclerView
    var parentView = holder.itemView.parent
    while (parentView != null && parentView !is RecyclerView) {
        parentView = parentView.parent
    }
    // 根据RecyclerView的ID设置对应颜色
    when ((parentView as? RecyclerView)?.id) {
        R.id.recyclerOne -> holder.contentTv.setTextColor(Color.BLACK)
        R.id.recyclerTwo -> holder.contentTv.setTextColor(Color.BLUE)
    }
}

注意:使用该方案必须给两个RecyclerView在XML布局中设置唯一的ID,否则判断会失效。同时向上遍历View树存在额外性能开销,非必要不优先使用该方案。

内容的提问来源于stack exchange,提问作者Bob Redity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:21:11