1. 程式人生 > >layabox list渲染優化

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,雖然使用者看上去像是一次渲染完成,而且這樣做效能較好,按需載入,預載入。