Как обновить текст серийного номера в пунктах утилизации в режиме реального времени - PullRequest
0 голосов
/ 23 марта 2020

У меня есть RecyclerView, который отображает последовательность чисел в начале каждого элемента списка, как показано ниже.

enter image description here

Я сделал это, получив положение элемента в списке и добавление единицы.

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 об обновлении номеров в реальном времени.

enter image description here

Мой адаптер

    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)
        }
    }

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Попробуйте использовать индекс элемента вместо позиции в onBindViewHolder(), чтобы он выглядел следующим образом:

override fun onBindViewHolder(holder: ViewHolder, 
position: Int) {
    val item = getItem(position)
    val index = getCurrentList().indexOf(item)
    holder.bind(item!!, clickListener)
    holder.umberTextView.text = 
    index.plus(1).toString()
}

Надеюсь, это поможет!

0 голосов
/ 23 марта 2020

Вам необходимо удалить элемент из списка, отправив ему позицию из RecyclerView, как только вы это сделаете, позиция элемента будет обновлена.

Вы можете сделать это, составив список в своем классе виден адаптером как он может быть удален из него.

...