Android ListView 單條刷新方法實踐及原理解析
對于使用listView配合adapter進行刷新的方法大家都不陌生,先刷新adapter里的數(shù)據(jù),然后調(diào)用notifydatasetchange通知listView刷新界面。
方法雖然簡單,但這里面涉及到一個效率的問題,調(diào)用notifydatasetchange其實會導(dǎo)致adpter的getView方法被多次調(diào)用 (畫面上能顯示多少就會被調(diào)用多少次),如果是很明確的知道只更新了list中的某一個項的數(shù)據(jù)(比如用戶點擊list某一項后更新該項的顯示狀態(tài),或者 后臺回調(diào)更新list某一項,等等),應(yīng)該盡量避免getView被無辜的多次調(diào)用,特別是當(dāng)后臺線程特別多,回調(diào)的頻率特別高,并且界面的布局優(yōu)化得不是特別好的時候,使用notityDataSetChaned()方法來更新界面就會顯得列表卡頓,用戶體驗不佳。
下面我們來介紹一下如何對listView進行單條刷新:
首先我們看一下adapter的getView方法,我們要進行單條刷新就要手動調(diào)用這個方法。
public View getView(int position, View convertView, ViewGroup parent)
那么這三個參數(shù)是如何確定的呢,第三個參數(shù)很好確定,就是你的listview。
為了確定另外兩個參數(shù)position和converView,這里介紹幾個lisView的新方法:
getFirstVisiblePosition(),該方法獲取當(dāng)前狀態(tài)下list的第一個可見item的position。
getLastVisiblePosition(),該方法獲取當(dāng)前狀態(tài)下list的最后一個可見item的position。
getItemAtPosition(int position),該方法返回當(dāng)前狀態(tài)下position位置上listView的convertView
ps:這里的convertView是復(fù)用的,也就是說不管position的值是多大(這個要看你整個list有多大),converView的個數(shù)應(yīng)該始終是屏幕上能顯示的list的條數(shù)那么多。
所 以,我們通過從getFirstVisiblePosition的值到getLastVisiblePosition的值之間的listitem和需要進 行更新的條件(比如id)進行比較確定哪一個是要更新的(如果不在當(dāng)前可是范圍內(nèi)也就沒有必要更新了,等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 單條刷新方法實踐及原理解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Qt qml中l(wèi)istview 列表視圖控件(下拉刷新、上拉分頁、滾動軸)
- Android UI設(shè)計系列之自定義ListView仿QQ空間阻尼下拉刷新和漸變菜單欄效果(8)
- Android仿XListView支持下拉刷新和上劃加載更多的自定義RecyclerView
- Android Listview上下拉動刷新tab滑動切換功能
- Android自定義控件開發(fā)實戰(zhàn)之實現(xiàn)ListView下拉刷新實例代碼
- Android實現(xiàn)上拉加載更多以及下拉刷新功能(ListView)
- Android開發(fā)之ListView實現(xiàn)Item局部刷新
- Android中ListView下拉刷新的實現(xiàn)方法實例分析
- Android開發(fā)之ListView列表刷新和加載更多實現(xiàn)方法
- android中ListView數(shù)據(jù)刷新時的同步方法
相關(guān)文章
Android Studio 新建項目通過git上傳到碼云圖文教程詳解
本文通過圖文并茂的方式給大家介紹了Android Studio 新建項目通過git上傳到碼云的方法,需要的朋友可以參考下2017-11-11
Cocos2d-x 3.0中集成社交分享ShareSDK的詳細步驟和常見問題解決
這篇文章主要介紹了Cocos2d-x 3.0中集成社交分享ShareSDK的詳細步驟和常見問題的解決方法以及需要注意的問題,需要的朋友可以參考下2014-04-04
Android實現(xiàn)快速滾動FastScrollView效果
這篇文章主要介紹了Android實現(xiàn)快速滾動FastScrollView效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Android Mms之:對話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
本篇文章是對Android中對話與聯(lián)系人的關(guān)聯(lián)進行了詳細的分析介紹,需要的朋友參考下2013-05-05
Android?ViewPager?+?Fragment實現(xiàn)滑動頁面效果
本文通過實例代碼較詳細的給大家介紹了Android?ViewPager?+?Fragment實現(xiàn)滑動頁面效果,需要的朋友可以參考下2018-06-06
Android仿新浪微博發(fā)布微博界面設(shè)計(5)
這篇文章主要為大家詳細介紹了Android仿新浪微博發(fā)布微博界面設(shè)計方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11

