Время не обновляется в RecyclerView с использованием таймера обратного отсчета ⇐ Android
Время не обновляется в RecyclerView с использованием таймера обратного отсчета
В приложении есть окно повторного использования с несколькими элементами, и каждый элемент имеет собственный таймер обратного отсчета.
Теперь проблема в том, что таймер обратного отсчета работает только для видимого элемента, а таймер обратного отсчета для остальных элементов работает (запускается) только тогда, когда элемент прокручивается или отображается.
Я хочу запустить таймер обратного отсчета для элемента recyclerview. как это исправить?
Вот код:
класс MyBidAdapter( частный прослушиватель val: OnItemClickListener, частный вал userId: Int, ) : ListAdapter(DiffCallback()) { частный val countdownTimerMap: MutableMap = mutableMapOf() переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): MyBidViewHolder { привязка val = ItemBidBinding.inflate(LayoutInflater.from(parent.context), родительский, false) вернуть MyBidViewHolder(привязка) } переопределить удовольствие onBindViewHolder(держатель: MyBidViewHolder, позиция: Int) { val currentItem = getItem (позиция) держатель.bind(текущийItem) } внутренний класс MyBidViewHolder (частная привязка val: ItemBidBinding): RecyclerView.ViewHolder(binding.root) { в этом { привязка.применить { } } забавная привязка (данные: MyBid) { привязка.применить { // Отменяем предыдущий CountdownTimerUtil countdownTimerMap[позиция]?.cancel() val днейTextView = textView46 val часыTextView = textView48 вал минутTextView = textView50 val секундTextView = textView52 // Вычисляем общее время в миллисекундах val totalTimeInMillis: Long = data.day.toLong() * 24 * 60 * 60 * 1000 + data.hours.toLong() * 60 * 60 * 1000 + data.minet.toLong() * 60 * 1000 + данные.секунда.toLong() * 1000 // Убедитесь, что CountdownTimerUtil всегда инициализирован countdownTimerMap[позиция] = CountdownTimerUtil( тотальноевремявмиллис, 1000, дниTextView, часыTextView, минутыTextView, секундыTextView ) { // Этот код будет выполнен после завершения обратного отсчета button.isEnabled = ложь } // Запускаем таймер countdownTimerMap[позиция]?.start() } } } класс DiffCallback : DiffUtil.ItemCallback() { переопределить fun areItemsTheSame(oldItem: MyBid, newItem: MyBid): Boolean { вернуть oldItem.id == newItem.id } переопределить удовольствие areContentsTheSame(oldItem: MyBid, newItem: MyBid): Boolean { вернуть старыйItem == новыйItem } } }
В приложении есть окно повторного использования с несколькими элементами, и каждый элемент имеет собственный таймер обратного отсчета.
Теперь проблема в том, что таймер обратного отсчета работает только для видимого элемента, а таймер обратного отсчета для остальных элементов работает (запускается) только тогда, когда элемент прокручивается или отображается.
Я хочу запустить таймер обратного отсчета для элемента recyclerview. как это исправить?
Вот код:
класс MyBidAdapter( частный прослушиватель val: OnItemClickListener, частный вал userId: Int, ) : ListAdapter(DiffCallback()) { частный val countdownTimerMap: MutableMap = mutableMapOf() переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): MyBidViewHolder { привязка val = ItemBidBinding.inflate(LayoutInflater.from(parent.context), родительский, false) вернуть MyBidViewHolder(привязка) } переопределить удовольствие onBindViewHolder(держатель: MyBidViewHolder, позиция: Int) { val currentItem = getItem (позиция) держатель.bind(текущийItem) } внутренний класс MyBidViewHolder (частная привязка val: ItemBidBinding): RecyclerView.ViewHolder(binding.root) { в этом { привязка.применить { } } забавная привязка (данные: MyBid) { привязка.применить { // Отменяем предыдущий CountdownTimerUtil countdownTimerMap[позиция]?.cancel() val днейTextView = textView46 val часыTextView = textView48 вал минутTextView = textView50 val секундTextView = textView52 // Вычисляем общее время в миллисекундах val totalTimeInMillis: Long = data.day.toLong() * 24 * 60 * 60 * 1000 + data.hours.toLong() * 60 * 60 * 1000 + data.minet.toLong() * 60 * 1000 + данные.секунда.toLong() * 1000 // Убедитесь, что CountdownTimerUtil всегда инициализирован countdownTimerMap[позиция] = CountdownTimerUtil( тотальноевремявмиллис, 1000, дниTextView, часыTextView, минутыTextView, секундыTextView ) { // Этот код будет выполнен после завершения обратного отсчета button.isEnabled = ложь } // Запускаем таймер countdownTimerMap[позиция]?.start() } } } класс DiffCallback : DiffUtil.ItemCallback() { переопределить fun areItemsTheSame(oldItem: MyBid, newItem: MyBid): Boolean { вернуть oldItem.id == newItem.id } переопределить удовольствие areContentsTheSame(oldItem: MyBid, newItem: MyBid): Boolean { вернуть старыйItem == новыйItem } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение