RecyclerView使用體驗
Android L推出了RecyclerView來取代ListView,初次使用這個控制元件,感覺比ListView方便多了。直觀感受就是實現橫向ListView只需要將Manager的orientation設定為horizontal。RecyclerView的特點主要有以下幾點:
- 通過各種LayoutManager管理Item的佈局(這塊較複雜,正在研究中)
- 通過繼承或者預設的ItemDecoration自定義分割線可以實現各種型別分割線,只有你想不到,哈哈
- 通過實現ItemAnimation控制Item的刪除,新增動畫
大致結構:
基本使用:
- 新增依賴(版本不一致,具體看更新)
...
compile'com.android.support:recyclerview-v7:21.0.+'
}```
- 佈局檔案新增該控制元件
- 關聯佈局管理器與資料來源
```mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);
//建立預設的線性LayoutManager
mLayoutManager =newLinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//如果可以確定每個item的高度是固定的,設定這個選項可以提高效能
mRecyclerView.setHasFixedSize(true);
//建立並設定Adapter
mAdapter = newMyAdapter(getDummyDatas());
mRecyclerView.setAdapter(mAdapter);'''
接下來就是Adapter的建立了
'''public class MyAdapter extends RecyclerView.Adapter {
public String[] datas =null;
public MyAdapter(String[] datas) {
this.datas = datas;
}
//建立新View,被LayoutManager所呼叫
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
ViewHolder vh =newViewHolder(view);
returnvh;
}
//將資料與介面進行繫結的操作
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.mTextView.setText(datas[position]);
}
//獲取資料的數量
@Override
public int getItemCount() {
returndatas.length;
}
//自定義的ViewHolder,持有每個Item的的所有介面元素
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view){
super(view);
mTextView = (TextView) view.findViewById(R.id.text);
}
}
}```
另附上本人對該Adapter的封裝[github上Adapter的封裝](https://github.com/TedWithAHammer/BaseRecyclerAdapter)
接下來講講自定義Item的實現,可參考[hongyang的recyclerview解析](http://blog.csdn.net/lmj623565791/article/details/45059587)
#####RecyclerView.ItemDecoration原始碼
```public static abstract class ItemDecoration{
public void onDraw(Canvas c, RecyclerView parent, State state) {
onDraw(c, parent);
}
public void onDrawOver(Canvas c, RecyclerView parent, State state) {
onDrawOver(c, parent);
}
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),
parent);
}
@Deprecated
public void getItemOffsets(Rect outRect,intitemPosition, RecyclerView parent) {
outRect.set(0,0,0,0);
}```
- onDraw方法先於drawChildren
- onDrawOver在drawChildren之後,一般我們選擇複寫其中一個即可
- getItemOffsets可以通過outRect.set()為每個Item設定一定的偏移量,主要用於繪製Decorator,限定繪製區域
可以通過設定theme.xml改變分割線圖片,只要新增
```<item name="android:listDivider">@drawable/...</item>```
也可以自己寫Drawable實現漸變
再來談談比較難的一部分,也就是Manager部分,系統提供三種預設佈局器
* LinearLayoutManager 支援橫向,縱向
* GridLayoutManager 網格佈局管理器
* StaggeredGridLayoutManager用於實現瀑布式佈局
瀑布式的實現只要在onBindView裡面為Item設定不同的尺寸即可
若要隨意的佈局需重寫LayoutManager或者RecyclerView(正在研究中,希望高手指點下)
------------
說了這麼多,RecyclerView之所以強大,無非實現了ListView的功能,實現效能上的優化,使初級程式設計師也能很好的控制Item。那麼接下來看看ListView下的一些常用功能的RecyclerView實現
##### 1.常用的下拉重新整理功能(核心:實現底部與頭部的監聽)
首先我們要複寫RecyclerView在初始化函式內呼叫來監聽
addOnScrollListener(onScrollListener);
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
super.onScrolled(recyclerView, dx, dy);
Log.i("--------", "dx:" + dx + "dy:" + dy);
isTopOrBottom(recyclerView);
}```
若已經到頭再繼續拉動,則跟ListView原理一樣將原來的Padding慢慢的設回0
2.標籤功能
這個更加簡單隻要在RecyclerView上覆蓋一個標籤,監聽上面的onCurrentPos然後取出資料來源中對應資料,想怎麼顯示就怎麼顯示,最好判斷一下前一個pos跟當前pos是否相等,不然一滑動執行很多次比較浪費效能
相關文章
- RecyclerView 體驗優化及入坑總結View優化
- RecyclerView使用View
- RecyclerView的使用View
- RecyclerView 的基本使用View
- RecyclerView的簡單使用View
- Android RecyclerView的使用AndroidView
- RecyclerView使用指南(四)—— 使用ItemDecorationView
- RecyclerView使用指南(一)—— 基本使用View
- 微軟OneDrive使用體驗微軟
- 亞馬遜DRKG使用體驗亞馬遜
- Spark 3.2使用體驗Spark
- 阿貝雲使用體驗
- AdGuard Home使用體驗
- RecyclerView使用封裝與優化View封裝優化
- Think Different - 從蘋果的使用者體驗說JavaEye的使用者體驗蘋果Java
- 雲原生 Serverless Database 使用體驗ServerDatabase
- HanLP使用教程——NLP初體驗HanLP
- Tensorflow使用初體驗:SessionSession
- IDC系統使用體驗
- MacBook Pro 14使用深度體驗Mac
- RecyclerView使用指南(二)—— 多種ItemLayoutView
- 【安卓筆記】CardView+RecyclerView使用示例安卓筆記View
- RecyclerViewView
- FlinkCDC 2.0使用實踐體驗
- 提高MWeb使用體驗的小技巧Web
- Vue初體驗之Element的使用Vue
- gin使用BasicAuth()(驗證)中介軟體
- 如何使用RecyclerView打造首頁輪播圖View
- Android入門教程 | RecyclerView使用入門AndroidView
- Android入門教程 | RecyclerView實際使用AndroidView
- 安卓RecyclerView的使用以及抽取基類安卓View
- RecyclerView 之使用 ItemTouchHelper 實現互動動畫View動畫
- Android使用RecyclerView實現二級列表AndroidView
- RecyclerView系列View
- RecyclerView Adapter 系列(1):RecyclerView Array AdapterViewAPT
- RecyclerView Adapters 系列(2):RecyclerView Cursor AdapterViewAPT
- RecyclerView使用指南(五)—— 實現吸頂效果View
- RecyclerView使用,優化,條目閃爍問題View優化