In the classical version my adapter worked well. The app began to crash after I decided to add a button at the end of the list. I have ArrayIndexOutOfBoundsException
in getItemId()
and can't figured out how to fix it.
The button implementation is found here
methods onCreateViewHolder()
, onBindViewHolder()
and class `ViewHolder don't contain anything remarkable, so i just pointed out that they are present.
adapter:
public class PersonAdapter
extends RealmRecyclerViewAdapter<Person, RecyclerView.ViewHolder> {
private Realm realm;
private PersonFragment personFragment;
private OrderedRealmCollection<Person> adapterData;
public PersonAdapter(PersonFragment fragment, Realm realm, OrderedRealmCollection<Person> collection) {
super(collection, true, true);
this.realm = realm;
this.adapterData = collection;
this.personFragment = fragment;
setHasStableIds(true);
}
@Override
public int getItemViewType(int position) {
return (position == adapterData.size()) ? R.layout.rrv_button_add : R.layout.rrv_item;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// see example above
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Person person = getData().get(position);
PersonHolder personHolder = (ProductHolder) holder;
if(position == adapterData.size()){
//personHolder.button.setOnClickListener
}
else {
personHolder.name.setText(person.getName());
}
}
@Override
public long getItemId(int index) {
return getItem(index).getId();
}
@Override
public int getItemCount() {
return isDataValid() ? adapterData.size()+1 : 0;
}
private boolean isDataValid() {
return adapterData != null && adapterData.isValid();
}
public class ProductHolder
extends RecyclerView.ViewHolder {
// all that's needed
}
}
I feel that the solution is on the surface, but I am completely de-energized. Please point to my mistake