Я получаю эту ошибку:
java .lang.IndexOutOfBoundsException: обнаружена несогласованность. Недопустимая позиция элемента 29
И я думаю, это потому, что у меня есть функция в качестве параметра моего адаптера, потому что, если я прокомментирую этот метод, он работает, но я хочу понять, почему он не работает ... .
Мой адаптер выглядит так:
class MyAdapter(private val click: (position: Int) -> Unit) :
RecyclerView.Adapter<MyAdapter.ViewHolder>() {
private var list = ArrayList<Int>()
fun addItems(numberList: ArrayList<Int>) {
list.addAll(numberList)
notifyDataSetChanged()
}
fun removeItemAt(position: Int) {
list.remove(position)
notifyItemChanged(position)
}
fun removeAll() {
list.clear()
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.my_item, parent, false)
)
override fun getItemCount(): Int = list.size
override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
holder.bind(list[position], position, click)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
....
fun bind(number: Int, position: Int, click: (position: Int) -> Unit) {
...
click.invoke(position)
}
....
}
}
Проблема в том, что я устанавливаю адаптер следующим образом:
adapter = MyAdapter { itemClicked ->
//I'd like to delete the item so I have adapter.deleteItem(itemClicked)
}
Он вылетает, но если я этого не сделаю ' Я использую эту строку кода, и она работает без щелчка.
Это простое приложение, в котором я хочу обновить список, удалить элемент при нажатии и, если возможно, удалить весь список.