Ответ 1
Если вы используете это на телефоне Samsung, ознакомьтесь с этим StackOverflow Q & A:
Это трассировка стека:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
at java.util.ArrayList.get(ArrayList.java:311)
at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
at android.widget.ListView.dispatchDrawWithExcessScroll_Default(ListView.java:3354)
at android.widget.ListView.dispatchDraw(ListView.java:3054)
at android.view.View.draw(View.java:6936)
at android.widget.AbsListView.draw(AbsListView.java:3022)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6936)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6936)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6936)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1904)
at android.view.ViewRoot.draw(ViewRoot.java:1527)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Я не знаю, как воспроизвести эту ошибку. Я попытался случайным образом щелкнуть каждый ListView
в своем приложении и никогда не смог воспроизвести эту ошибку.
Это произошло только после того, как приложение было отправлено на рынок. Я никогда не видел эту ошибку раньше.
Хуже всего то, что у него нет кода из моего приложения, поэтому я даже не знаю, что делает пользователь, когда это произошло.
Кто-нибудь видел такую ошибку?
Кто-нибудь знает, с чего начать исправление?
Если вы используете это на телефоне Samsung, ознакомьтесь с этим StackOverflow Q & A:
Я также столкнулся с тем же самым исключением на Nexus 5, работающем с Lollipop. Это произойдет, если I:
Добавление фиктивного нижнего колонтитула не исправить, оно просто изменило ошибку на Invalid index 1, size is 1
:)... но благодаря @AlexD у меня была подсказка, где искать обходные пути.
В моем случае вызов list.setFooterDividersEnabled(false)
после успешного создания списка ListView предотвращает возникновение сбоя.
У меня такая же ошибка, когда listview пуст. Посмотрев исходный код, я обнаружил, что сбой:
return mFooterViewInfos.get(adjPosition - adapterCount).isSelectable
Как вы можете видеть, нет проверки, что mFooterViewInfos пуст, поэтому мой обходной путь для этой проблемы - это просто добавление фиктивного нижнего колонтитула:
list.addFooterView(new View(context, null, false));
Может быть, немного позже, но я думаю, что нашел обходное решение для этого. Думаю, нужно удалить headerView/footerView (в зависимости от того, что вы используете), прежде чем покинуть фрагмент/активности:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
....
getListView().addHeaderView(mHeaderView);
}
public void onDestroyView() {
super.onDestroyView();
if (getListView().getHeaderViewsCount() > 0) {
getListView().removeHeaderView(mHeaderView);
}
}
Возможно, ваша активность будет убита, а затем воссоздана (например, при изменении ориентации экрана), поэтому ваш массив инициализируется нулевыми элементами, и все же какая-то другая часть вашей программы не знает об этом и ожидает, что этот массив будет иметь некоторые элементы,