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

如何在ChildRecyclerAdapter中获取ParentRecyclerAdapter的DayOfWeek数据?

解决方案:在子适配器中获取父适配器的DayOfWeek数据

要实现这个需求,核心思路是在父适配器绑定子RecyclerView时,把当前Item对应的DayOfWeek值直接传递给子适配器,这样子适配器就能在自己的onBindViewHolder里直接使用这个值做逻辑判断了。下面是具体的实现步骤和修改后的代码:

1. 修改ChildRecyclerAdapter的构造函数

首先给子适配器添加一个专门接收当前DayOfWeek的参数,替换掉原来冗余的parentArrayList(我们只需要当前父Item的DayOfWeek,不需要整个列表):

class ChildRecyclerAdapter(
    private var time: ArrayList<String>,
    var context: Context,
    private val currentDayOfWeek: String // 新增:接收当前父Item的DayOfWeek
) : RecyclerView.Adapter<ChildRecyclerAdapter.ChildViewHolder>() {

    override fun onBindViewHolder(holder: ChildViewHolder, position: Int) {
        holder.timeOfDay.text = time[position]
        mTableFeed = TableFeedJava(context, mLectures)
        holder.childofChildRV.adapter = mTableFeed

        // 这里就可以直接使用currentDayOfWeek做逻辑判断了
        for (i in mTimeSpinner!!.indices) {
            // 结合DayOfWeek和时间条件做判断
            if (holder.timeOfDay.text == mTimeSpinner!![i] && currentDayOfWeek == "目标星期值") {
                holder.childofChildRV.visibility = View.VISIBLE
            } else {
                holder.childofChildRV.visibility = View.INVISIBLE
            }
        }
    }

    // 其他原有代码保持不变
    inner class ChildViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        internal var timeOfDay: TextView = itemView.findViewById(R.id.timeOfDay)
        internal var childofChildRV: RecyclerView = itemView.findViewById(R.id.childofChildRecycler)
    }
}

2. 在ParentRecyclerAdapter中传递DayOfWeek

在父适配器的onBindViewHolder里,初始化子适配器时把当前position对应的DayOfWeek传递进去,同时别忘了给子RecyclerView设置布局管理器:

class ParentRecyclerAdapter(
    private var parentArrayList: ArrayList<String>?,
    private var context: Context,
    private var mTableFeed: TableFeedJava?
) : RecyclerView.Adapter<ParentRecyclerAdapter.ParentViewHolder>() {

    override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
        val currentDay = parentArrayList!![position]
        holder.DayOfWeek.text = currentDay

        // 初始化子适配器,传入当前的DayOfWeek
        val childAdapter = ChildRecyclerAdapter(
            time = /* 传入你的time列表数据源 */,
            context = context,
            currentDayOfWeek = currentDay
        )
        // 给子RecyclerView设置布局管理器(示例用LinearLayoutManager)
        holder.ChildRV.layoutManager = LinearLayoutManager(context)
        holder.ChildRV.adapter = childAdapter
    }

    override fun getItemCount(): Int {
        return parentArrayList!!.size
    }

    inner class ParentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        internal var DayOfWeek: TextView = itemView.findViewById(R.id.dayOfWeek)
        internal var ChildRV: RecyclerView = itemView.findViewById(R.id.ChildRecycler)
    }
}

关键说明

  • 我们只传递当前父Item对应的currentDayOfWeek,而非整个父列表,这样更高效,也避免了子适配器不必要的列表持有。
  • 如果需要根据不同星期做差异化逻辑,直接在子适配器的onBindViewHolder里对currentDayOfWeek做判断即可,比如判断是否为周一/周末等。

内容的提问来源于stack exchange,提问作者Orwa Ogwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:17:36