layabox list渲染優化
前面已經說過一種方法了,就是先載入圖片,再渲染list,但是對於存在較多list時,這種方法存在問題,
使用者雖然能迅速看到介面,這比只能看到載入時的黑色介面體驗要好,但是,使用者開啟介面後,會看到很多的listitem
沒有資料進行渲染,看到的是UI檔案中的介面。
進一步優化的方法是,渲染item時選擇先渲染圖片,至於其他資料,走之前的渲染流程。
具體做法是,
1.在item中封裝公有方法setSkin
2.在list所在類的onreload方法中,獲取item,然後呼叫item中的setSkin方法
注意,這裡有坑
1.getCell之後要用 as強制轉換一次型別為待渲染的item型別
2.getCell的值可能為null,導致報錯,所以要判斷是否為null,不為null才能呼叫setSkin
list渲染補充:(2018-10-29)
前面說過getCell的值可能為空,那麼,這樣就會導致通過getCell充值list中的item時,為null的那些cell不會被重置,
舉個例子,list中可見的有4個item,但是list總共有6個item,只有當前可見的cell才能通過getCell獲取,需求時當前選中的item加特效突出顯示,切換點選下一個item,當前高亮顯示的特效清楚,下一個被點選的item加高亮特效,如果使用者點選第一個item,然後滑動到最後一個item,點選最後一個item,這時候,通過getCell重置時,由於第一個item的getCell的返回值為null,不會執行重置方法,強制執行,值為null,會報錯,當用戶再滑動回第一個item時,會發現第一個item的高粱特效仍然存在,並沒有被清除掉。
解決方法:除了需要在panel中執行item中的public方法重置高亮特效,還需要在item中setDATASOURCE時直接執行一遍重置高亮特效。因為在永華滑動list時,某個item將要出現時,會進行一次渲染。這樣就可以重置了,實際上,list中的渲染並不是一次渲染完成的,當list較多,可視區以外存在item時,只會渲染可視區外的第一個item,雖然使用者看上去像是一次渲染完成,而且這樣做效能較好,按需載入,預載入。