最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android ListView 單條刷新方法實踐及原理解析

 更新時間:2016年07月28日 11:17:52   投稿:mrr  
這篇文章主要介紹了Android ListView 單條刷新方法實踐及原理解析的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

對于使用listView配合adapter進行刷新的方法大家都不陌生,先刷新adapter里的數據,然后調用notifydatasetchange通知listView刷新界面。

方法雖然簡單,但這里面涉及到一個效率的問題,調用notifydatasetchange其實會導致adpter的getView方法被多次調用 (畫面上能顯示多少就會被調用多少次),如果是很明確的知道只更新了list中的某一個項的數據(比如用戶點擊list某一項后更新該項的顯示狀態(tài),或者 后臺回調更新list某一項,等等),應該盡量避免getView被無辜的多次調用,特別是當后臺線程特別多,回調的頻率特別高,并且界面的布局優(yōu)化得不是特別好的時候,使用notityDataSetChaned()方法來更新界面就會顯得列表卡頓,用戶體驗不佳。

下面我們來介紹一下如何對listView進行單條刷新:

首先我們看一下adapter的getView方法,我們要進行單條刷新就要手動調用這個方法。

public View getView(int position, View convertView, ViewGroup parent)

那么這三個參數是如何確定的呢,第三個參數很好確定,就是你的listview。

為了確定另外兩個參數position和converView,這里介紹幾個lisView的新方法:

getFirstVisiblePosition(),該方法獲取當前狀態(tài)下list的第一個可見item的position。

getLastVisiblePosition(),該方法獲取當前狀態(tài)下list的最后一個可見item的position。

getItemAtPosition(int position),該方法返回當前狀態(tài)下position位置上listView的convertView

ps:這里的convertView是復用的,也就是說不管position的值是多大(這個要看你整個list有多大),converView的個數應該始終是屏幕上能顯示的list的條數那么多。

所 以,我們通過從getFirstVisiblePosition的值到getLastVisiblePosition的值之間的listitem和需要進 行更新的條件(比如id)進行比較確定哪一個是要更新的(如果不在當前可是范圍內也就沒有必要更新了,等list拉動的時候自然就會更新出來)

代碼如下,其實這個方法是google 2011年開發(fā)者大會上提出的方法——ListView單條更新:

private void updateSingleRow(ListView listView, long id) { 
if (listView != null) { 
int start = listView.getFirstVisiblePosition(); 
for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++) 
if (id == ((Messages) listView.getItemAtPosition(i)).getId()) { 
View view = listView.getChildAt(i - start); 
getView(i, view, listView); 
break; 
} 
} 
} 

以上所述是小編給大家介紹的Android ListView 單條刷新方法實踐及原理解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

最新評論

洛隆县| 紫云| 榆社县| 高唐县| 东山县| 正定县| 盐亭县| 金塔县| 惠东县| 广元市| 象州县| 南充市| 桑植县| 恩施市| 老河口市| 区。| 南岸区| 共和县| 贺兰县| 小金县| 崇州市| 洛南县| 若尔盖县| 绿春县| 洛浦县| 合江县| 花莲县| 多伦县| 琼结县| 北安市| 昌宁县| 灵石县| 错那县| 通河县| 璧山县| 恩施市| 都兰县| 深泽县| 奉新县| 广安市| 塔城市|