新聞中心
這篇博客教大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡頓情況;但是在 ListView 加載大量復(fù)雜布局和圖片的時(shí)候,即使使用了 convertView 和 viewHolder,ListView還是卡頓,本文主要討論了如何在加載復(fù)雜 list_item 同時(shí)保證 ListView 流暢性。

創(chuàng)新互聯(lián)公司始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過(guò)多達(dá)10年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:玻璃隔斷等企業(yè),備受客戶贊揚(yáng)。
核心思想是
監(jiān)聽(tīng)滑動(dòng)據(jù)加載,異步加載數(shù)據(jù)。
getView 函數(shù)一定不能耗時(shí),有耗時(shí)任務(wù)要異步加載。
主要的方法:
-
先判斷當(dāng)前 ListView 的狀態(tài),只有 ListView 停止滑動(dòng)才開(kāi)啟新線程加載數(shù)據(jù),其他狀態(tài)均忽略。
-
使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法來(lái)顯示 item。
-
耗時(shí)任務(wù)一定不要在 getView 方法中進(jìn)行,***異步進(jìn)行。
具體代碼如下:
- //判斷l(xiāng)istView狀態(tài)
- AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {// ListView
- // 觸摸事件
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- }
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- switch (scrollState) {
- case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑動(dòng)狀態(tài)
- threadFlag = false;
- break;
- case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止
- threadFlag = true;
- startThread();//開(kāi)啟新線程,加載數(shù)據(jù)
- break;
- case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 觸摸listView
- threadFlag = false;
- break;
- default:
- // Toast.makeText(contextt, "default",
- // Toast.LENGTH_SHORT).show();
- break;
- }
- }
- };
相信做到以上三點(diǎn),就能運(yùn)用自如的使用 ListView。
當(dāng)前文章:AndroidListView優(yōu)化最佳實(shí)踐
地址分享:http://fisionsoft.com.cn/article/dpjjjpg.html


咨詢
建站咨詢
