HeaderViewListAdapter 随机崩溃

Posted

技术标签:

【中文标题】HeaderViewListAdapter 随机崩溃【英文标题】:HeaderViewListAdapter randomly crashes 【发布时间】:2014-10-17 17:21:48 【问题描述】:

我在 crashlytics 中随机崩溃,我无法模拟它。它在 android V2 和 V4 上随机崩溃,但非常罕见

java.lang.IndexOutOfBoundsException: Invalid index 3, size is 0
   at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
   at java.util.ArrayList.get(ArrayList.java:311)
   at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
   at android.widget.AbsListView.obtainView(AbsListView.java:1498)
   at android.widget.ListView.makeAndAddView(ListView.java:1749)
   at android.widget.ListView.fillSpecific(ListView.java:1294)
   at android.widget.ListView.layoutChildren(ListView.java:1580)
   at android.widget.AbsListView.onLayout(AbsListView.java:1349)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:801)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1263)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1137)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1051)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
   at android.view.View.layout(View.java:7320)
   at android.view.ViewRoot.performTraversals(ViewRoot.java:1162)
   at android.view.ViewRoot.handleMessage(ViewRoot.java:1882)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:130)
   at android.app.ActivityThread.main(ActivityThread.java:3701)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:507)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
   at dalvik.system.NativeStart.main(NativeStart.java)

索引 3 无效,大小为 0 - 在 crashlytics 中索引是随机的。 我在片段中使用带有页眉和页脚的 ListView。

onCreateView中:

mSearchBox = inflater.inflate(R.layout.search_box, mListView, false);
mListView.addHeaderView(mSearchBox, null, false);
mListView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();

我在 ListView 中使用标题为 EditText 在 ListView 中进行搜索(目的是因为我希望 EditText 可以与 listview 内容一起滚动)。我还使用 addFooterView 来显示加载器(加载列表中的下一个项目时)。

你可以看看 HeaderViewListAdapter line 225 (GrepCode):

public View getView(int position, View convertView, ViewGroup parent) 
// ...
// ... code
// ...

// Footer (off-limits positions will throw an IndexOutOfBoundsException)
return mFooterViewInfos.get(adjPosition - adapterCount).view;

编辑: 我找到了类似的 *** 线程,但这对我没有帮助:Indexoutofboundsexception with listview 在带有片段的 ListView 中使用页眉或页脚时,看起来 android ListView 有点错误。

【问题讨论】:

我也遇到了这个问题,你现在有解决办法了吗? 更新帖子,见上文。 @Yuraj.thanks,这看起来很有效。我在我的nexus 5 android 6.0 中发现了这个问题。我还检查了其中的源代码,因为当使用addHeaderViewaddFooterView 添加页脚视图或页眉视图时,适配器已更改为HeaderViewListAdapter,这有问题. @Yuraj 发布您的编辑作为您问题的解决方案!!! 【参考方案1】:

在清除适配器之前,我必须在 listview 上设置空适配器:

mListView.setAdapter(null);
mAdapter.clear();
mAdapter.notifyDataSetChanged();
mListView.setAdapter(mAdapter);

【讨论】:

以上是关于HeaderViewListAdapter 随机崩溃的主要内容,如果未能解决你的问题,请参考以下文章

西部世界今日评论:B站豆瓣无底线崩,HTTP拿什么跟IPFS比?

hadoop集群崩了,用了一天才重新弄好。

10-多写一个@Autowired导致程序崩了

linux服务器显卡崩了怎么处理

淘宝崩了,哭的不止尾款人

WPF 被输入法带崩进程