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
