如何在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
相关产品推荐
相关产品推荐

