Kotlin 中 RecyclerView 中项目绑定的逻辑
Posted
技术标签:
【中文标题】Kotlin 中 RecyclerView 中项目绑定的逻辑【英文标题】:Logic for items binding in RecyclerView in Kotlin 【发布时间】:2021-10-27 11:05:30 【问题描述】:我想在为 RecyclerView 绑定 ViewHolder 时为项目添加一些逻辑。 我的适配器如下所示:
class MyAdapter(): ListAdapter<Item, MyAdapter.ItemViewHolder>(DiffCallback())
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder
val binding = MyItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ItemViewHolder(binding)
override fun onBindViewHolder(holder: ItemViewHolder, position: Int)
val currentItem = getItem(position)
holder.bind(currentItem)
inner class ItemViewHolder(private val binding: MyItemBinding): RecyclerView.ViewHolder(binding.root)
fun bind(item: Item)
binding.apply
tvStar.text = ""
tvValueA.text = item.ValueA
tvValueB.text = item.ValueB
我需要更改 tvStar.text 取决于 item.ValueA 和 item.ValueB 中的值。像这样的:
binding.apply
if (item.ValueA == 0.toFloat())
tvStar.text = ""
else if (item.ValueA != item.ValueB)
tvStar.text = "-"
else if (item.ValueA == item.ValueB)
tvStar.text = "*"
如果 ValueA(Float 类型)为零,则文本应为空,如果两个值不同且 ValueA 不为零,则文本应为“-”,当两个值相同时,文本应为“* ”。 我尝试了这个解决方案,但它不起作用。
【问题讨论】:
究竟是什么不起作用,错误或意外结果是什么? 尝试在代码中添加 Log.d 或断点 @mightyWOZ 谢谢你们,我写错了变量名。 【参考方案1】:您可以使用以下代码:
class MyAdapter(): ListAdapter<Item, MyAdapter.ItemViewHolder>(DiffCallback())
...
inner class ItemViewHolder(private val binding: MyItemBinding): RecyclerView.ViewHolder(binding.root)
fun bind(item: Item)
binding.apply
tvStar.text = when
item.ValueA == 0f -> ""
item.ValueA == item.ValueB -> "*"
else -> "-"
...
并确保该位置的项目具有正确的 ValueA
和 ValueB
值。
【讨论】:
【参考方案2】:我像这样更改了代码。看起来我的值名称有一些错误。
binding.apply
tvStar.text = if (item.ValueA == 0.toFloat())
""
else (if (item.ValueA != item.ValueB)
"-"
else if (item.ValueA == item.ValueB)
"*"
else
""
)
【讨论】:
以上是关于Kotlin 中 RecyclerView 中项目绑定的逻辑的主要内容,如果未能解决你的问题,请参考以下文章
Android Kotlin:如何从 recyclerview 中成功删除项目、调用 notifyItemRangeChanged() 和动画
RecyclerView 动画问题 Android Kotlin
如何将数据从 RecyclerView 传递到 Kotlin 中的 DialogFragment?
如何使用kotlin滑动删除存储在firestore中的recyclerview项目?