android - 如何实时更新recyclerview项目中的序列号文本
问题描述
我有一个 RecyclerView,它在每个列表项的开头显示一系列数字,如下所示。
我通过获取项目在列表中的位置并添加一个来做到这一点。
onBindViewHolder
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item!!, clickListener)
holder.numberTextView.text = position.plus(1).toString()
}
我希望在删除列表中的项目时实时更新数字。截至目前,当我删除 recyclerview 中的项目时,我得到一个如下所示的列表。我必须刷新布局以获取顺序编号列表。如何实时更新数字。
我的适配器
class Adapter(
private val clickListener: ClickListener) :
ListAdapter<DataItems, Adapter.ViewHolder>(DiffCallback()) {
class DiffCallback : DiffUtil.ItemCallback<DataItems>() {
override fun areItemsTheSame(oldItem: DataItems, newItem: DataItems): Boolean {
return oldItem.itemId == newItem.itemId
}
@SuppressLint("DiffUtilEquals")
override fun areContentsTheSame(oldItem: OrderSummary, newItem: OrderSummary): Boolean {
return oldItem == newItem
}
}
fun getItemAtPosition(position: Int): DataItems {
return getItem(position)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item!!, clickListener)
holder.umberTextView.text = position.plus(1).toString()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder.from(parent)
}
class ViewHolder private constructor(val binding: ItemBinding) :
RecyclerView.ViewHolder(binding.root) {
val numberTextView = binding.orderItemListNumber
fun bind(
item: DataItems,
clickListener: SummaryItemListener
) {
binding.clickListener = clickListener
binding.DataItems= item
binding.executePendingBindings()
}
companion object {
fun from(parent: ViewGroup): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding =
ItemBinding.inflate(layoutInflater, parent, false)
return ViewHolder(binding)
}
}
}
}
我如何删除项目:
override fun onSwiped(
viewHolder: RecyclerView.ViewHolder,
direction: Int) {
val position = viewHolder.adapterPosition
val item = adapter.getItemAtPosition(position)
if (direction == ItemTouchHelper.LEFT) {
val toast: Toast =
Toast.makeText(
context,
"1 item removed: ${item.name}",
Toast.LENGTH_SHORT
)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
viewModel.delete(item) // Method to delete item from database
}
ViewModel 中的删除方法
fun delete(summary: OrderSummary) {
uiScope.launch {
deleteItem(summary)
}
}
private suspend fun deleteItem(orderSummary: OrderSummary) {
withContext(Dispatchers.IO) {
database.delete(orderSummary)
}
}
解决方案
您需要通过从 发送位置从列表中删除该项目RecyclerView
,一旦您这样做,该项目的位置将被更新。
您可以通过使适配器看到您的类中的列表来做到这一点,因为它可以从中删除。
推荐阅读
- python - 为什么“-1”的python len()命令是2?
- javascript - 将 json 数据从一个组件传递到另一个组件。Vue.js
- python - 欧洲卡车模拟器中的直接输入不起作用
- javascript - 通过 axios 和 firebase 获取 JS file()
- sas - 在使用 MDY() 之前检查 SAS 日期是否有效?
- reactjs - 如何在 material-ui 中创建转储轮播?
- css - perspective 和 translateZ 沿对角线移动
- youtube-iframe-api - Youtube 播放器取消静音功能在 iframe 中不起作用
- sql - BigQuery 错误 - 未分类名称 - 合并 GA 数据时
- java - Guice - 使用两种不同的实现注入对象