編輯:關於Android編程
對於使用listView配合adapter進行刷新的方法大家都不陌生,先刷新adapter裡的數據,然後調用notifydatasetchange通知listView刷新界面。
方法雖然簡單,但這裡面涉及到一個效率的問題,調用notifydatasetchange其實會導致adpter的getView方法被多次調用 (畫面上能顯示多少就會被調用多少次),如果是很明確的知道只更新了list中的某一個項的數據(比如用戶點擊list某一項後更新該項的顯示狀態,或者 後台回調更新list某一項,等等),應該盡量避免getView被無辜的多次調用,特別是當後台線程特別多,回調的頻率特別高,並且界面的布局優化得不是特別好的時候,使用notityDataSetChaned()方法來更新界面就會顯得列表卡頓,用戶體驗不佳。
下面我們來介紹一下如何對listView進行單條刷新:
首先我們看一下adapter的getView方法,我們要進行單條刷新就要手動調用這個方法。
public View getView(int position, View convertView, ViewGroup parent)
那麼這三個參數是如何確定的呢,第三個參數很好確定,就是你的listview。
為了確定另外兩個參數position和converView,這裡介紹幾個lisView的新方法:
getFirstVisiblePosition(),該方法獲取當前狀態下list的第一個可見item的position。
getLastVisiblePosition(),該方法獲取當前狀態下list的最後一個可見item的position。
getItemAtPosition(int position),該方法返回當前狀態下position位置上listView的convertView
ps:這裡的convertView是復用的,也就是說不管position的值是多大(這個要看你整個list有多大),converView的個數應該始終是屏幕上能顯示的list的條數那麼多。
所 以,我們通過從getFirstVisiblePosition的值到getLastVisiblePosition的值之間的listitem和需要進 行更新的條件(比如id)進行比較確定哪一個是要更新的(如果不在當前可是范圍內也就沒有必要更新了,等list拉動的時候自然就會更新出來)
代碼如下,其實這個方法是google 2011年開發者大會上提出的方法——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 單條刷新方法實踐及原理解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
百思不得姐之圖片處理(保存與下載)
一 功能圖二 講解思路1 回顧上一篇內容2 創建加載圖片類(同時創建xib)3 點擊圖片查看大圖4 點擊查看大圖(查看長圖)5 model出展示圖片的控制器6 保存圖片7
Android基於ViewPager Fragment實現選項卡
先給大家展示效果圖:1.新建TestFragmen繼承Fragmentpublic class TestFragment extends Fragment { priv
Android程序開發之Listview下拉刷新上拉(滑動分頁)加載更多
最近做的類似於微博的項目中,有個Android功能要使用到listview的向下拉刷新來刷新最新消息,向上拉刷新(滑動分頁)來加載更多。新浪微博就是使用這種方式的典型。當
Android系統進程間通信(IPC)機制Binder中的Server和Client獲得Service Manager接口之路
在前面一篇文章淺談Service Manager成為Android進程間通信(IPC