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

如何在RecyclerView的ViewHolder中填充View?技术求助

解决RecyclerView ViewHolder中填充FrameLayout无效的问题

嘿,我看了你的代码,问题出在你给favoriteEmptyFrame填充布局的方式上!

你现在用的是:

LayoutInflater.from(itemView.context).inflate(R.layout.section_favorite_empty, favoriteEmptyFrame, false)

这里的问题在于inflate方法的第三个参数attachToRoot设为了false——这个参数决定了是否把inflated出来的视图直接附加到传入的ViewGroup(也就是你的favoriteEmptyFrame)上。当你传false时,系统只会创建这个布局的视图对象,但不会把它添加到容器里,所以你看不到任何效果。

两种修复方案:

  • 方案一:直接让系统自动附加视图
    把第三个参数改成true,这样inflate的时候就会自动把布局添加到favoriteEmptyFrame里:

    LayoutInflater.from(itemView.context).inflate(R.layout.section_favorite_empty, favoriteEmptyFrame, true)
    
  • 方案二:手动添加视图(适合需要先修改视图再添加的场景)
    如果你需要在添加前对empty视图做一些自定义操作(比如设置文本、绑定点击事件),可以先创建视图,再手动添加到容器:

    val emptyView = LayoutInflater.from(itemView.context).inflate(R.layout.section_favorite_empty, favoriteEmptyFrame, false)
    // 这里可以对emptyView做初始化,比如:emptyView.findViewById<TextView>(R.id.empty_text).text = "暂无收藏"
    favoriteEmptyFrame.addView(emptyView)
    

额外注意点:

别忘了每次bind的时候先清空favoriteEmptyFrame,不然多次调用bind会重复添加视图,导致布局重叠。所以在填充前加上这句:

favoriteEmptyFrame.removeAllViews()

修改后的when块代码应该是这样的:

when(myProfileViewModel.emptyViewType) {
    MyProfileViewModel.EMPTY_VIEW_TYPE_FAVORITE -> {
        favoriteEmptyFrame.removeAllViews() // 先清空容器
        LayoutInflater.from(itemView.context).inflate(R.layout.section_favorite_empty, favoriteEmptyFrame, true)
    }
    // 其他empty类型的处理逻辑
}

这样应该就能正常显示收藏为空的布局啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:58