還在用Lisview?RecyclerView都已經出來一年多了!git
想必你們多或多或少的接觸過或者瞭解過RecyclerView,爲何沒有用起來,緣由大概以下?github
ListView我用的挺好的,爲何要換RecyclerView?ide
ListView穩定,熟悉,還知道不少開源庫,特別的好用!佈局
RecyclerView不能添加頭部,ListView能!性能
在Andorid 5.0出來不久,我就已經寫過RecyclerView的簡單介紹以及基本使用,不瞭解的能夠看看ListView升級版RecyclerView,瞭解過的同窗能夠忽略,並往下看。動畫
RecyclerView最大的優點就是靈活,RecyclerView只需改變一行代碼就能夠變化多種不一樣的佈局顯示排版,這一點對於開發者是很是方便的!this
RecyclerView.Adapter,比BaseAdapter作了更好的封裝,把BaseAdapter的getView方法拆分紅onCreateViewHolder方法和onBindViewHolder方法,強制須要建立ViewHolder,這樣的好處就是避免了初學者寫性能不佳的代碼spa
get到下面的技能就可以在使用RcyclerView的大路上暢通無阻了!.net
添加分割線code
添加點按效果
列表動畫
改變某個數據保持當前位置
添加頭部尾部
列表分組
各類效果集成Demo
更靈活的RecyclerView
//經過如下方法添加分割線 mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
DividerItemDecoration須要繼承RecyclerView.ItemDecoration這個抽象類實現一些方法 。可是我感受過於麻煩,因此我想到的是:
直接在item_view裏面底部本身添加一根線佈局,這樣就無需重寫了,而且這樣還有個好處就是,若是細心的同窗會發現,添加分割線,最後一個item下面不會有分割線,顯然當數據量不足一個屏幕的時候顯得很突兀,可是在item_view下面添加一個線的佈局則不會出現這種狀況
RecyclerView直接在item_view裏面配置便可selector便可。
一個好的用戶體驗就是要有操做動畫的過渡,而不是生硬的刷新列表。
推薦一個RecyclerView的動畫庫(recyclerview-animators)
RecyclerView自帶添加、刪除動畫,而ListView則需添加額外的代碼才能實現。
刪除調用RecyclerView的adapter的notifyItemRemoved
添加調用RecyclerView的adapter的notifyItemInserted
說到adapter咱們就來講說RecyclerView.Adapter和BaseAdapter相比,額外提供了一下這些方法:
// 數據發生了改變,那調用這個方法,傳入改變對象的位置。 public final void notifyItemChanged(int position); // 能夠刷新從positionStart開始itemCount數量的item了 public final void notifyItemRangeChanged(int positionStart, int itemCount); // 添加,傳入對象的位置。 public final void notifyItemInserted(int position); // 刪除,傳入對象的位置。 public final void notifyItemRemoved(int position); // 對象從fromPosition移動到toPosition public final void notifyItemMoved(int fromPosition, int toPosition); //批量添加 public final void notifyItemRangeInserted(int positionStart, int itemCount); //批量刪除 public final void notifyItemRangeRemoved(int positionStart, int itemCount);
這種需求是廣泛存在的,就是改變列表某一個item數據,而後刷新列表,若是是ListView刷新後則會回到最頂部,而RecyclerView一樣的操做可是原來滑動的位置不變。
twoway-view 封裝了RecyclerView經常使用方法,如click等等,以及支持了更多不一樣的佈局,使得RecyclerView使用起來更簡單!
造起來!小夥伴們!