Intereting Posts
Отключение android CoordinatorLayout прокрутки поведения Простой пример киви Дисплей Android SDK Manager, кнопки управления виртуальным устройством Android в eclipse? Обновление панели выполнения загрузки в области уведомлений из AsynTask Как сохранить прокрутку ScrollView в нижней части? Отключить пинч / зум в браузере Android 2.1 на устройствах HTC Создать селектор стилей Начать работу с Android так медленно Android 6 – Запись на внешнее хранилище не срабатывает ТОЛЬКО ТОЛЬКО ПЕРВЫЙ Проблема с прокруткой графического макета в Eclipse Android Development OnClickListener в динамическом расположении таблицы Возможно ли, чтобы строка состояния прокручивалась вместе с панелью инструментов с использованием схемы координатора на Android? Невозможно изменить видимость ImageView Как сбросить номер диспетчера уведомлений при уведомлении Lollipop: рисовать позади statusBar с его цветом, установленным на прозрачный

Android API 21 – просмотр нижнего колонтитула IndexOutOfBoundsException

У меня есть ListView в моем приложении, которое использует footerView. Мой код хорошо работает на всех устройствах, кроме 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); 

Это то, что я делаю в 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) ... 

Спасибо за вашу помощь !

У меня была такая же проблема, и, проведя некоторые тесты, я понял, что это происходит, потому что у меня есть два последовательных обращения к list.removeFooterView(mFooterView) , как и у вас.

В первый раз я вызываю removeFooterView в свой метод onResponse (onClassmentReceived в вашем случае), а затем я вызываю его снова в методе ScrollListener.onScroll (), который я использую, чтобы знать, когда загружать следующую страницу данных.

Я работаю над тем, чтобы лучше понять, почему, но удаляя invokation в методе onScroll (), все работает отлично на всех моих тестовых устройствах. Пожалуйста, дайте мне знать, если это сработает для вас, возможно, мы сможем понять что-то еще! 🙂