Android API 21 - view IndexOutOfBoundsException footer

I have a ListView in my application that uses footerView. My code works well on all devices except API 21: I got an IndexOutOfBoundsException. My ListView contains a class, and this class can be sorted differently using a counter. My application crashes every time I change my classification order a second time.

This is my code in onCreate:

    //ListView
    classement_listview = (ListView) findViewById(R.id.classement_listview);
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    footer_view = inflater.inflate(R.layout.classement_listview_footer, null);
    classement_listview.addFooterView(footer_view);
    classementAdapter = new ClassementAdapter();
    classement_listview.setAdapter(classementAdapter);

    //Spinner
    Spinner spinner = (Spinner) findViewById(R.id.spinner_sort_by);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.classement_sort_by_entries, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);

This is what I do in onItemSelected (spinner listener)

    classement_listview.removeFooterView(footer_view);
    classementAdapter.clearUsers();
    classement_viewflipper.setDisplayedChild(0);
    new Thread(new Runnable() {
        @Override
        public void run() {
            classementService.getClassement(ClassementActivity.this, typeClassement, countNbusers);
        }
    }).start();

And here is the method that updates the ListView:

@Override
public void onClassementReceived(Classement classement) {
    if (classement == null) {
        classement_viewflipper.setDisplayedChild(2);
        return;
    }
    classement_viewflipper.setDisplayedChild(1);

    List<User> users = classement.getUsers();
    classementAdapter.addUsers(users);
    this.countNbusers += users.size();
    if (countNbusers >= classement.getNbMaxUsers()) {
        if (classement_listview.getFooterViewsCount() == 0)
            classement_listview.addFooterView(footer_view);
    } else
        classement_listview.removeFooterView(footer_view);

    classementAdapter.notifyDataSetChanged();
}

And this is a mistake:

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.get(ArrayList.java:308)
        at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
        at android.widget.ListView.dispatchDraw(ListView.java:3307)
        at android.view.View.draw(View.java:15117)
        ... (etc) ...

Thank you for your help!

+4
source share
1 answer

, , , , , list.removeFooterView(mFooterView), .

removeFooterView onResponse (onClassmentReceived ), ScrollListener.onScroll(), , , .

, , , invokation onScroll(), . , , , , - !:)

0

All Articles