最近在项目中要使用一个二级标签,结果使用中发现在getChildrenCount()方法下出现无规则的数组越界现象。排查后发现点击的position位置没有问题,反而二级数组childs的长度莫名其妙变短了,而且是无规律的。
@Override public int getChildrenCount(int i) { return childs.get(i).size(); }
我突然想到我这个项目一级标签,二级标签的数据是分开从网络拉取的。
那造成这种情况的原因那就只可能是网络拉取数据的时候,二级标签数据未拉取全就急于展示(或者说进入页面过于快的点击一级标签),导致点击一级标签,拿着一级标签的positon去检索二级标签时,发现二级标签的数据可能还未拉取下来,数组就越界了。
解决方式有很多,要么等所有数据拉取全了在展示,要么存本地。不过我这个项目还没做本地存储,临时的解决方式就是加个判断:
@Override public int getChildrenCount(int i) { if (i >= childs.size()){ return i=0; } return childs.get(i).size(); }
如果点击的位置positon 大于 二级标签已加载的数组长度,直接返回0,不做处理。这样做的好处是可以显示已加载完成的那部分数据。
问题很简单,就是现象比较有误导性,还是挺坑的。