У меня есть ListView в моем приложении, в котором используется footerView. Мой код хорошо работает на всех устройствах, кроме API 21: я получил исключение IndexOutOfBoundsException. My ListView содержит класс, и этот кластер можно сортировать по-разному с помощью счетчика. Мое приложение разбивается каждый раз, когда я меняю порядок своей классификации во второй раз.Android API 21 - просмотр нижнего колонтитула IndexOutOfBoundsException
Это мой код в 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);
Это то, что я делаю в onItemSelected (слушателю Прядильщиков)
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();
А вот метод, который обновляет 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();
}
И это ошибка:
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) ...
Благодарим за помощь!
На какой линии вы получаете исключение? – natario
Я понятия не имею, стек stacktrace исключений не показывает строку моего кода. Единственный способ избежать этого исключения - прокомментировать все строки с помощью footer_view. – jeromeC
Я получаю excatly то же самое, исключение появляется при удалении нижнего колонтитула (classement_listview.removeFooterView (footer_view);) нашел ли вы способ исправить его? – Chol