android ListView 局部刷新
生活随笔
收集整理的這篇文章主要介紹了
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 局部刷新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android Notification
- 下一篇: android 使用浏览器打开指定页面