1. 程式人生 > 實用技巧 >androi中listview元件之getChildAt()方法的深入瞭解

androi中listview元件之getChildAt()方法的深入瞭解

最近做andrid專案時使用listView做出gridView的效果顯示圖片,也許有人會問為什麼不直接用gridView呢?諾,有時候gridView是做不出某些效果的,比如iread(讀書軟體)的書架效果就必須用listview做才能做出那樣精緻的書架效果,閒話不多說,直接說問題了。因為程式碼在公司,就不貼原始碼了,需要的人應該一看就明白。

listView用的是自定義的baseAdapter,然後在baseAdapter裡for迴圈4個線性佈局,每個佈局中都有三個元件:MyRecyImage(自定義的ImageView),ImageView,TextView(按順序放線上性佈局,不要問我為什麼這麼做,反正就是遇到這種問題),顯示在終端就是一行四個佈局,每個佈局三個組建如下圖:

220309459.png

當convertView==null時就載入四個佈局,這個就略過,convertView!=null時就用getChildAt(i)取得快取中的組建。

以上講的都是廢話,現在進入正題:

因為listView一個Item中有四個佈局,共計12個組建,getChildAt(i)時會出現型別轉換異常,也就是getChildAt(i)時取快取組建時混亂了,在網上沒找到關於這方面的東西,後幾經波折,找到了原因,看下圖:

221926469.png

原來getChildAt(1)和getChildAt(4)的值是一樣的,所以當把這兩個賦給MyRecyImage時就會出現型別轉換異常,三個組建的值應該分別為MyRecyImagemi=getChildAt(i%3),ImageViewiv=getChildAt((i+1)%3),TextViewtv=getChildAt((i+2)%3),這樣做的話不管一行有多少個佈局,多少個組建,都能從快取中取出例項化的組建,也不會報空指標異常。

問題到這裡就解決了,哪裡不清楚或不對的還望指正,明天送上程式碼!

轉載於:https://blog.51cto.com/mercy1015/1320593