項目中用到1個內部復雜布局的listview,每一個item中都有動態(tài)的子item,相當于listview的item中還有l(wèi)istview的樣式。剛開始做的思路是,用1個listview,然后item中加個LinearLayout,然后代碼動態(tài)的生成子item view 添加在其中,希望這樣的表述大家能明白,依照這樣的思路做好以后發(fā)現(xiàn)快速滑動的時候,1卡1頓,實在不能直視,在配置低點的機器上更是不能看。
但是由于趕進度1直沒有優(yōu)化,現(xiàn)在回頭看下,雖然已用了viewHolder但是listview緩沖的機制完全沒有發(fā)揮作用,由于每一個item show的時候都需要removeAll 子item,然后再添加1遍,繪制的時間太長,造成了卡頓。
怎樣解決這個問題尼?
剛好google在support v7推出了recyclerView,有著更好的緩存優(yōu)化機制,我如獲救星,趕快將listview換成了recyclerView,但是效果不盡人意,沒有我想象中的效力提升,仔細想了想,recycleView只是針對listView的多type情況做了優(yōu)化,而實際需求中還是在item中動態(tài)的生成item,沒有用到recyclerView的優(yōu)勢。
那末自然下面想到的就是干掉動態(tài)生成的Item部份,把數(shù)據拆分成1個1個的listview item。但是又擔心這樣的工作量會不會很大,實際抽象進程中發(fā)現(xiàn)很容易,就把原來1個model數(shù)據拆分成了7個不同類型的model,getView的時候先通過postion 獲得當前model的type,然后返回不同的View item,很簡單的就把原來只有1種item的listview拆分成了1個有7種類型Item的listView。跑起來以后,速度嘩嘩的,感覺就更1個item的1樣。
listView支持多種類型的Item時候還有個坑:繼承BaseAdapter的時候必須復寫下面兩個方法
The RecyclerView
widget
is a more advanced and flexible version of ListView
.
This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. Use the RecyclerView
widget
when you have data collections whose elements change at runtime based on user action or network events.
希望能幫助到有類似需求的同學:
ListView中有復雜布局,特別是有動態(tài)生成的布局的子布局的,可以斟酌1下將原來的Item拆分成不同的類型,然后使用recyclerView。