Мой RecyclerAdapter работает, но когда я добавляю в него новый элемент и затем нажимаю какую-то кнопку, возникает исключение ArrayIndexOutOfBoundsException.
Существует два сценария заполнения моего списка: первый - когда появляются новые вставленные данные, что делает его позицию сверху, другой - для разбиения на страницы, когда пользователь прокручивает вниз еще 4 новых загруженных элемента.
Это для добавления нового элемента
//This will be called only if user added some new post
postList.add(0, post);
//Notify the adapter that new item is added
postRecyclerAdapter.notifyItemInserted(0);
//Notify the adapter to update all position
postRecyclerAdapter.notifyItemRangeChanged(0, postList.size() + 1 );
При нумерации страниц я просто добавляю старые данные
postList.add(annonPost);
//Update the Recycler adapter that new data is added
postRecyclerAdapter.notifyItemInserted(postList.size());
Вот так выглядит мой onBindViewHolder.
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int position) {
if (viewHolder instanceof ItemViewHolder){
ItemViewHolder holder = (ItemViewHolder) viewHolder;
//I have a Firebase listeners here that updates the setAttributes automatically when a button is clicked
holder.setAttribute(someValueFromListener,
postList.get(getItem(holder.getAdapterPosition())).name);
}}}
Теперь, поскольку у меня есть заголовок, я получаю позицию и количество предметов
private int getItem(int position){
return position - 1;
}
@Override
public int getItemCount() {
return this.postList.size() + 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_HEADER;
return TYPE_ITEM;
}
Добавление нового элемента в порядке, но как только я начал нажимать какую-то кнопку, чтобы вызвать прослушиватель Firebase, я получаю java.lang.ArrayIndexOutOfBoundsException: length=12; index=-2
. Что-то не так с позицией? Я также проверил значение getItem (holder.getAdapterPosition ()) , и это нормально.