国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ViewPager異常總結(jié)

2019-11-06 09:42:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1. 出現(xiàn)異常:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

原因:圖片資源少于4個(gè),對(duì)應(yīng)生成的ImageView也少于4個(gè)。

眾所周知,ViewPager一般會(huì)維護(hù)2~3個(gè)頁(yè),如果只有3個(gè)ImageView,很可能出現(xiàn)這種情況,在生成完3個(gè)Page頁(yè)后并準(zhǔn)備生成第4個(gè)頁(yè)面時(shí),本應(yīng)該移除的最前面的頁(yè)面還未被移除,系統(tǒng)就會(huì)報(bào)異常并且給你這樣一個(gè)提示:You must call removeView() on the child's parent first(意思是讓你先將最前面頁(yè)的子View從最前面頁(yè)移除掉,再將該子View添加到第4頁(yè)中)。

解決辦法:在只有1張圖片時(shí),不能滑動(dòng),暫不處理;如果有2~3張圖片時(shí),遞歸增加至大于等于4個(gè)ImageView為止(下方為小編解決該問(wèn)題的代碼)。

 /**  * 初始化ImageViews集合  * @param imageIds  */ PRivate void initImageViews(int[] imageIds) {  ......  // ImageViews集合中的圖片個(gè)數(shù)在[2,3]時(shí)會(huì)存在問(wèn)題,遞歸再次填充一遍  if(mImageViews.size() > 1 && mImageViews.size() < 4){   initImageViews(imageIds);  } }

2. 滑動(dòng)效果出現(xiàn)混亂(后面會(huì)附上混亂的效果圖)

原因:ViewPager源碼本身存在問(wèn)題 - 數(shù)據(jù)范圍越界問(wèn)題。

小編的獲取ViewPager頁(yè)面數(shù)量的方法是這樣寫的:

 @Override public int getCount() {  return mImageViews.size() <=1 ? mImageViews.size() : Short.MAX_VALUE; }

小于1時(shí),頁(yè)面沒(méi)有滑動(dòng),不需要擴(kuò)充頁(yè)面數(shù)量;

大于1時(shí),取Short取值范圍的最大值32767(我們會(huì)有3W多頁(yè)面,但不會(huì)同時(shí)存在,因?yàn)閂iewPager最多維持3個(gè)頁(yè)面)

小編這里用的是Short,但一開(kāi)始從網(wǎng)上找的相似實(shí)現(xiàn)全是使用的Integer(Integer.MAX_VALUE = 2147483647, 也就是我們的ViewPager將會(huì)有大概21億個(gè)頁(yè)面),如果使用Integer,比較細(xì)心的朋友會(huì)發(fā)現(xiàn)滑動(dòng)經(jīng)常出現(xiàn)混亂。

頁(yè)面反向回彈Bug

我們松手時(shí),頁(yè)面出現(xiàn)反向回彈(1~2頁(yè)),這和我們期望的滑動(dòng)效果不一致。

這是其中一種Bug,還有一些不太好說(shuō)明的滑動(dòng)Bug,小編就用“滑動(dòng)混亂”這個(gè)名詞進(jìn)行解釋了...

解決辦法:縮小頁(yè)面數(shù)量(小編使用的Short代替Integer減少了頁(yè)面)。

具體的無(wú)Bug的臨界值,有興趣的小伙伴可以去實(shí)驗(yàn),小編的測(cè)試結(jié)果如下:

800萬(wàn)以內(nèi):基本無(wú)滑動(dòng)Bug;

1000萬(wàn)左右:開(kāi)始出現(xiàn)當(dāng)前頁(yè)面定位不準(zhǔn)確的Bug,但還未出現(xiàn)反向回彈Bug。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岐山县| 黑山县| 秦安县| 柳州市| 宝丰县| 商城县| 西藏| 远安县| 清水河县| 潞城市| 绥中县| 抚远县| 荥经县| 潼南县| 河池市| 南城县| 安远县| 巴里| 黄大仙区| 大同市| 阿克陶县| 永寿县| 鸡西市| 景泰县| 夏邑县| 江北区| 磴口县| 周宁县| 鹤山市| 共和县| 通州区| 忻州市| 北辰区| 高阳县| 武威市| 平陆县| 克山县| 六枝特区| 密山市| 宁武县| 清水河县|