Проблема
Я пишу приложение для Android, которое должно обрабатывать переменное количество элементов в RecyclerView.Когда я добавляю элемент, некоторые данные сохраняются в файле конфигурации вместе с UUID.
Либо при запуске приложения, либо когда элемент создается или удаляется пользователем во время выполнения, RecyclerView обновляется и показываетвсе существующие в настоящее время элементы.
Каждый из этих элементов имеет кнопку для удаления его и его дополнительных данных из конфигурации.Когда я нажимаю эту кнопку, данные об элементах успешно удаляются из конфигурации, и они становятся невидимыми, что приводит к тому, что RecyclerView отображает только остальные элементы.
Однако, когда я пытаюсь вставить новый элемент, он непоказать, а скорее элемент, который был удален ранее во время этого сеанса.
Пытается
Я уже некоторое время ищу решение.Прежде всего, я начал читать документацию снова и снова, думая, что что-то упустил.Я также просмотрел несколько онлайн-примеров того, как правильно удалить элемент из RecyclerView, но не могу заставить его работать.
Код
package com.rappee.protectiveparking.ui
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import com.rappee.protectiveparking.R
import com.rappee.protectiveparking.core.Resources
import java.util.*
class ScrollerAdapter : RecyclerView.Adapter< ConsoleViewHolder >() ,
DragItemTouchHelperAdapter {
private var stockpile: Queue< String > = LinkedList< String >()
private var holder: MutableList< ConsoleViewHolder > = ArrayList()
fun push( identification: String ) {
this.stockpile.add( identification )
this.notifyItemInserted( this.itemCount - 1 )
}
fun remove( position: Int ) {
this.holder.removeAt( position )
this.notifyItemRemoved( position )
}
override fun onCreateViewHolder( parent: ViewGroup , type: Int ): ConsoleViewHolder {
val view: ConsoleViewHolder = ConsoleViewHolder( LayoutInflater.from( parent.context ).inflate( R.layout.console , parent , false ) , this.stockpile.poll() )
this.holder.add( view )
return view
}
override fun onBindViewHolder( holder: ConsoleViewHolder , position: Int ) {
return
}
override fun getItemCount(): Int {
return this.holder.size + this.stockpile.size
}
override fun onItemMove( from: Int , to: Int ): Boolean {
Collections.swap( this.holder , to , from )
for ( i in 0 until this.holder.size ) {
Resources.CONFIGURATION.push( "${this.holder.get( i ).identification}.${Resources.KEY_POSITION}" , "$i" )
}
this.notifyItemMoved( from , to )
return true
}
}
Поведение
Когда япопробуйте вставить новый элемент, я фактически помещаю UUID в «stockpile» и вызываю «notifyItemInserted», чтобы активировать «onCreateViewHolder».Когда это происходит, я выбираю основной UUID из 'stockpile' в форме String, чтобы передать его конструктору ConsoleViewHolder в качестве параметра.Только когда вызывается этот метод, фактическое представление вставляется в RecyclerView (не мое решение!).
Однако, когда я вставляю новый UUID и обновляю RecyclerView после удаления элемента, этот метод не 'Вызывается так, что новый вид не может быть показан.Единственное, что изменится, это то, что ранее удаленное представление снова всплыло.
МОЙ ВОПРОС: Как я могу исправить это поведение моего RecyclerView, показывающего удаленные элементы вместо недавно добавленных?