Android Kotlin viewBinder - 从 Activity 更改 RecyclerView Item 的 ItemView
Posted
技术标签:
【中文标题】Android Kotlin viewBinder - 从 Activity 更改 RecyclerView Item 的 ItemView【英文标题】:Android Kotlin viewBinder - change ItemView of RecyclerView Item from Activity 【发布时间】:2021-11-19 19:30:24 【问题描述】:从 Kotlin Synthetics 切换到 viewBinder 后,我无法从活动中更改 RecyclerView 项目的 itemView。
这是内部活动:
val viewHolder = binding.recyclerViewMemes.findViewHolderForAdapterPosition(i) as RecyclerView.ViewHolder
viewHolder.itemView.memeCommentsCount.text = "\u25CF"
我在memeCommentsCount
上收到unresolved reference
这是Recyclerview
里面的ViewHolder
:
class ViewHolder(itemView: MemeViewBinding?) : RecyclerView.ViewHolder(itemView!!.root)
val memeCommentsCount = itemView!!.memeCommentsCount
【问题讨论】:
如果我无法使用 viewBinder @a_local_nobody 完全做到这一点,我会这样做 如果您的 Activity 必须进入适配器来修改单个 ViewHolder 实例,那么您的整体设计就有问题。 Activity 应该为后备列表中的各个项目提供更改,并通知适配器该位置的项目已更改。当活动在适配器上调用notifyItemChanged()
时,适配器将为该项目调用自己的onBindViewHolder()
,因此视图将在那里相应地更新。在我看来,findViewHolderFor...
函数的任何使用都是代码异味。
你这样做的方式,如果当前项目不在屏幕上,则不会发生变化,然后滚动到屏幕上就会出错。并且在您的 ViewHolder 类中提供了一个提示……itemView
没有理由可以为空。您将其视为无论如何都不可为空,因为您在其上使用了!!
。使用!!
也几乎总是一种代码味道。
好吧,我让它不能为空,真的没有必要再用可空的了!! xD 谢谢!
【参考方案1】:
看起来您有自己的 ViewHolder
实现,但正在将变量转换为没有 memeCommentsCount 的默认实现。
尝试使用as ViewHolder
而不是as RecyclerView.ViewHolder
,并确保您导入的是ViewHolder 类而不是默认类
或者将您的 ViewHolder 重命名为 MemeViewHolder
之类的其他名称,并将您的 viewHolder 变量转换为该名称
此外,当您将其设置为视图持有者本身的变量时,您正试图将其从视图持有者的 itemView 中移除,因此该行需要更改
viewHolder.itemView.memeCommentsCount.text = "\u25CF"
到
viewHolder.memeCommentsCount.text = "\u25CF"
【讨论】:
我试过了,它自动从 ViewHolder 更改为 MemesAdapter.ViewHolder 但我仍然对 memeCommentsCount 有未解决的引用 @EduardUnruh 为我的答案添加了更新 是的,现在可以了。我不需要重命名 ViewHolder,因为我还是导入了我的自定义,使用 viewHolder.memeCommentsCount.text 而不是 viewHolder.itemView.memeCommentsCount.text 唯一仍然缺少的东西。谢谢!!以上是关于Android Kotlin viewBinder - 从 Activity 更改 RecyclerView Item 的 ItemView的主要内容,如果未能解决你的问题,请参考以下文章
Android Kotlin - viewBinding 在视图上导入未解析的引用
Android Jectpack-ViewBinding 实践(kotlin实现)
Android Kotlin - viewBinding 类型不匹配:推断类型为 DrawerLayout 但应为 ConstraintLayout
Android Kotlin viewBinder - 从 Activity 更改 RecyclerView Item 的 ItemView
Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions