У меня есть RecyclerView, который отображает последовательность чисел в начале каждого элемента списка, как показано ниже.
Я сделал это, получив положение элемента в списке и добавление единицы.
onBindViewHolder
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item!!, clickListener)
holder.numberTextView.text = position.plus(1).toString()
}
Я хочу, чтобы числа обновлялись в реальном времени при удалении элемента из список. На данный момент, когда я удаляю элементы в представлении реселлера, я получаю список, как показано ниже. Я должен обновить sh макет, чтобы получить последовательный нумерованный список. Как мне go об обновлении номеров в реальном времени.
Мой адаптер
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)
}
}