Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:RecyclerView局部刷新那點事~

android:RecyclerView局部刷新那點事~

編輯:關於Android編程

1.局部刷新的引入
提到RecyclerView,我們首先想到的是ListView,對於ListView的局部刷新,我們之前已經有解決方案,[android:ListView的局部刷新]當時的解決方案是:記錄點擊的Item的position,然後在更新過程中,不斷的判斷,該position是不是介於可見的Item之間,如果是,則更新,否者,不更新。
2.RecyclerView的局部更新

按照之前的思路,首先要尋找RecyclerView中可見的item的位置范圍,該方法並不在RecyclerView中,而是LinearLayoutManager中,如:

int fristPos = layoutManager.findFirstVisibleItemPosi
int lastPos = layoutManager.findLastVisibleItemPosition();

if (position >= fristPos && position <= lastPos) {
  View view = recyclerView.getChildAt(position);
  …
}

然後查找到對應的View,進行更新(遞歸查找)

/**
	 * 在ViewGroup中根據id進行查找
	 * @param vg
	 * @param id 如:R.id.tv_name
	 * @return
	 */
	private View findViewInViewGroupById(ViewGroup vg, int id) {
		for (int i = 0; i < vg.getChildCount(); i++) {
			View v = vg.getChildAt(i);
			if (v.getId() == id) {
				return v;
			} else {
				if (v instanceof ViewGroup) {
					return findViewInViewGroupById((ViewGroup) v, id);
				}
			}
		}
		return null;
	}



3.新的思路:notifyItemChanged
RecyclerView不像ListView,只有一個更新notifyDataSetChanged,它不僅保留了ListView的更新特點,還針對“增加,刪除,更新”操作專門進行更新,可以只更新一個item,也可以更新一部分item,所以,用起來效率更高。因此,RecyclerView的局部刷新,就可以通過修改數據源的方式,調用notifyItemChanged(position)即可。


4.優化
雖然只更新單個item,不會造成閃爍,但是,如果單個item都很復雜,比如,item中需要從網絡上加載圖片等等。為了避免多次刷新照成的閃爍,我們可以在加載的時候,為ImageView設置一個Tag,比如imageView.setTag(image_url),下一次再加載之前,首先獲取Tag,比如imageUrl = imageView.getTag(),如果此時的地址和之前的地址一樣,我們就不需要加載了,如果不一樣,再加載。


-------------------------------------------------------------------

更多交流,Android開發聯盟QQ群:272209595



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved