首頁 收藏 QQ群
 網站導航

ZNDS智能電視網 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 11999|回復: 0
上一主題 下一主題
[教程]

listview學習

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2013-8-28 16:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1在Android的UI組件中,ListView是一個非常實用的組件。該組件主要是用于展示大批量的同類數據,比如聯系人信息。   
而在自定義ListView的樣式時,需要重寫數據接口的ListAdapter類中的getView函數,以此來定制ListView中每個item的樣式。在這里Android系統為了效率的原因引進了ConvertView這一個變量。ConvertView在這里主要的作用就是方便系統在重寫UI時,能重用原來實用過的View實例,以此來降低系統資源的消耗和提高代碼效率。
但是當你希望根據itemid實現不同的樣式時,往往會出現一些意想不到的情況。這主要是因為兩方面的原因導致的
   
Andorid并不保證getView的執(zhí)行順序因為getView的不確定性,導致ConvertView的循序可能是無序的。   
   
簡單解釋ConvertView就是最近使用過的getView函數返回的實例,但是Andorid是怎樣決定使用那個實例傳遞給本次getView函數的呢?
在經過試驗后,我發(fā)現關于ConvertView的幾點特征。
   
對于一個ListView,Android保存所有曾經生成過的ConvertView實例,直至系統垃圾回收這些實例位置,而不是只保存最后使用的ConvertView對象。這些保存的ConvertView以使用時間順序排序,并依次被傳遞到getView函數中。   
以一個簡單的例子來會更直觀,   
   
我有一列String需要展示   
view plAIn view plain view plain view plain view plaincopy   
   
   
Context [] c = {1,2,3.......14,16,15}  Color [] co = {r,w,...........w,w,r}     
   
   
由此可見當下次需要調用多個convertView時,輸出的顏色順序將會出錯。   
   
總結:由于ListView在執(zhí)行時,各種操作需要重寫的item數是不確定的,同時getView函數調用的順序也是不確定的,這將導致convertView的數組順序發(fā)生嚴重的錯亂。所以并不建議通過判斷position來實現不同的樣式,除非不使用convertView   
   
目前避免這種錯亂的解決方法,有幾種。   
不使用convertView,直接每次重新實例化需要的View對象通過外部的靜態(tài)數組基于itemid或則position值來保存View的Layout,content及style信息,在每次getView函數中都重新賦值。   
   
但是上述兩種方法都存在效率損失的問題,目前沒有找到太好的解決方法。   
   
</strong

上一篇:Android軟件開發(fā)之發(fā)送短信與系統短信庫解析(三十)
下一篇:第二十二講:AIDL和遠程Service調用
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網 ( 蘇ICP備2023012627號 )

網絡信息服務信用承諾書 | 增值電信業(yè)務經營許可證:蘇B2-20221768 丨 蘇公網安備 32011402011373號

GMT+8, 2025-2-9 09:02 , Processed in 0.063285 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2025 ZNDS.Com

快速回復 返回頂部 返回列表