編輯:關於Android編程
按照之前的思路,首先要尋找RecyclerView中可見的item的位置范圍,該方法並不在RecyclerView中,而是LinearLayoutManager中,如:
int fristPos = layoutManager.findFirstVisibleItemPosi int lastPos = layoutManager.findLastVisibleItemPosition(); if (position >= fristPos && position <= lastPos) { View view = recyclerView.getChildAt(position); … }
/** * 在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 通過Socket 和服務器通訊,是一種比較常用的通訊方式,時間比較緊,說下大致的思路,希望能幫到使用socket 進行通信的人(1)開啟一個線程發送消息&
前言 在自定義ViewGroup中,有時候需要實現觸摸事件攔截,比如ListView下拉刷新就是典型的觸摸事件攔截的例子。觸摸事件攔截就是在觸摸事件被parent vie
說到RecyclerView,相信大家都不陌生,它是我們經典級ListView的升級版,升級後的RecyclerView展現了極大的靈活性。同時內部直接封裝了ViewHo
最近做的項目中需要實現斷點下載,即用戶一次下載可以分多次進行,下載過程可以中斷,在目前大多數的帶離線緩存的軟件都是需要實現這一功能。本文闡述了通過sqlite3簡單實現了