android:RecyclerView局部重新整理那點事~

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   color   os   sp   

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

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

int fristPos = layoutManager.findFirstVisibleItemPosiint 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



android:RecyclerView局部重新整理那點事~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.