日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android ListView 局部刷新

發布時間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ListView 局部刷新 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天,簡單講講android如何對ListView 進行局部刷新。

之前,自己做的ListView 發現刷新頻率太高了,而且很多界面上看不到的數據改變時調用Adapter.notifyDataSetChanged()也會導致整個ListView 進行刷新。其實我們只需在界面元素改變時刷新界面那個改變的item就可以。如果不停刷新這個界面,會導致效率減低。所以在網上搜索了資料,最終解決了問題。

平時在寫ListView的時候需要更改某些數據,這種情況我們一般會調用
notifyDataSetChanged()方法進行刷新,調用notifydatasetchange其實會導致adpter的getView方法被多次調用(畫面上能顯示多少就會被調用多少次),并且在有獲取網絡圖片的情況下會可能造成大量閃動或卡頓,極大的影響用戶體驗(圖片重新加載并閃動在ImageLoader框架中會出現,在glide框架中沒有出現)。

所以我們需要做單行刷新來進行優化

這個是Google官方給出的解決方案:

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; } } }

簡單講講,其實就是通過改變數據的位置找到對應的ListView 界面元素的位置,直接調用adpter.getView(i, view, listView); 進行局部刷新。上面的代碼也可以簡寫為:

/*** 局部更新數據,調用一次getView()方法;Google推薦的做法** @param listView 要更新的listview* @param position 要更新的位置*/public void notifyDataSetChanged(ListView listView, int position) {/**第一個可見的位置**/int firstVisiblePosition = listView.getFirstVisiblePosition();/**最后一個可見的位置**/int lastVisiblePosition = listView.getLastVisiblePosition();/**在看見范圍內才更新,不可見的滑動后自動會調用getView方法更新**/if (position >= firstVisiblePosition && position <= lastVisiblePosition) {/**獲取指定位置view對象**/View view = listView.getChildAt(position - firstVisiblePosition);adpter.getView(position, view, listView);}}這個也是一樣,先判斷刷新元素是否在ListView 的可見位置,如果在就直接調用adpter.getView(position, view, listView);進行刷新。


android ListView 局部刷新就講完了。


就這么簡單。



總結

以上是生活随笔為你收集整理的android ListView 局部刷新的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。