Kotlin 中 RecyclerView 中项目绑定的逻辑
Logic for items binding in RecyclerView in Kotlin
我想在 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 不为零,则文本应为“-”,当两个值相同时,文本应为“*”。
我试过这个解决方案,但它不起作用。
我把代码改成了这样。看来我在值的名称上有一些错误。
binding.apply {
tvStar.text = if (item.ValueA == 0.toFloat()){
""
}else (if (item.ValueA != item.ValueB){
"-"
} else if (item.ValueA == item.ValueB){
"*"
} else{
""
})}
您可以使用以下代码:
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
。
我想在 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 不为零,则文本应为“-”,当两个值相同时,文本应为“*”。 我试过这个解决方案,但它不起作用。
我把代码改成了这样。看来我在值的名称上有一些错误。
binding.apply {
tvStar.text = if (item.ValueA == 0.toFloat()){
""
}else (if (item.ValueA != item.ValueB){
"-"
} else if (item.ValueA == item.ValueB){
"*"
} else{
""
})}
您可以使用以下代码:
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
。