Android API 21-页脚视图IndexOutOfBoundsException

Android API 21-页脚视图IndexOutOfBoundsException,android,listview,footer,Android,Listview,Footer,我的应用程序中有一个使用页脚视图的列表视图。我的代码在所有设备上都能很好地工作,除了那些使用API 21的设备:我有一个IndexOutOfBoundsException。 我的ListView包含一个类,这个类可以通过微调器进行不同的排序。每次我第二次更改分类顺序时,我的应用程序都会崩溃 这是我在onCreate中的代码: //ListView classement_listview = (ListView) findViewById(R.id.classement_listv

我的应用程序中有一个使用页脚视图的列表视图。我的代码在所有设备上都能很好地工作,除了那些使用API 21的设备:我有一个IndexOutOfBoundsException。 我的ListView包含一个类,这个类可以通过微调器进行不同的排序。每次我第二次更改分类顺序时,我的应用程序都会崩溃

这是我在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);
下面是更新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();
}

谢谢你的帮助

我也遇到了同样的问题,通过做一些测试,我意识到这是因为我有两个对
list.removeFooterView(mFooterView)
的连续调用,就像您一样

第一次我在onResponse方法中调用
removeFooterView
(在您的案例中是onClassmentReceived),然后在ScrollListener.onScroll()方法中再次调用它,我使用它来知道何时加载下一页数据

我正在努力更好地理解原因,但是删除onScroll()方法中的调用后,我的所有测试设备都可以正常工作。
请让我知道这是否也适用于您,以便我们可以了解更多内容!:)

你在哪一行得到异常?我不知道,异常的stacktrace没有显示我代码的任何一行。我找到的唯一逃避此异常的方法是使用我的页脚视图对所有行进行注释。我得到的结果完全相同,删除页脚视图(classement\u listview.removeFooterView(footer\u view);)时会出现异常。你找到了纠正它的方法吗?我也遇到了这种情况,在android 4.4、5和6上也是如此。
@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();
}
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) ...