RecycleView:
是Android L版本中新添加的一個用來取代ListView的SDK,它的靈活性與可替代性比listview更好。android
RecyclerView與ListView原理是相似的:
都是僅僅維護少許的View而且能夠展現大量的數據集。
RecyclerView:
一、item的排列方式:兩種佈局管理器:app
LinearLayoutManager
GridLayoutManager
二、操做item的時候提供默認的動畫效果
三、item多種佈局比較方便
四、封裝了item的優化
五、適配器不一樣
不一樣點:
一、分割線,RecyclerView要自定義設置
二、監聽器,RecyclerView沒有條目監聽器,須要在適配器中自定義ide
RecyclerView用如下兩種方式簡化了數據的展現和處理:
使用LayoutManager來肯定每個item的排列方式
爲增長和刪除項目提供默認的動畫效果
也能夠定義本身的LayoutManager和添加刪除動畫佈局
使用RecycleView步驟:
1、添加依賴性能
//材料設計包
compile 'com.android.support:design:23.4.0'優化
//cardview包裹item佈局,美化效果
compile 'com.android.support:cardview-v7:23.4.0'
//下拉刷新包裹RecyclerView佈局
compile 'in.srain.cube:ultra-ptr:1.0.11'動畫
2、相關方法this
//若是能夠肯定每一個item的高度是固定的,設置這個選項能夠提升性能
recyclerView.setHasFixedSize(true);設計
//設置item佈局之間的分割線,三個選擇
recyclerView_main.addItemDecoration(new DividerGridItemDecoration(mContext))xml
//設置佈局管理器
recyclerView.setLayoutManager(LinearLayoutManager、GridLayoutManager)
//設置動畫效果
recyclerView.setItemAnimator(new DefaultItemAnimator());
//設置適配器
recyclerView.setAdapter(adapter);
//上拉加載下一頁
recyclerView_main.addOnScrollListener(//兩個方法:
線性佈局管理器獲得最後一條item的position;判斷,而後頁碼++)
//置頂功能
recyclerView.scrollToPosition(0);
3、實現下拉刷新:
一、SwipeRefreshLayout:(系統自帶的,只是下拉的時候佈局並無被下拉,須要自定義)
//包裹RecyclerView佈局
//漸變顏色
swipeRefreshLayout.setColorSchemeColors(...)
//監聽刷新
swipeRefreshLayout.setOnRefreshListener(//curPage = 1;loadNetworkData();)
//加載完成,消失圖標
swipeRefreshLayout.setRefreshing(false);
二、第三方類庫:library_pullToReflect
//佈局:PullToRefreshRecyclerView
//用法和RecycleView相似
//如設置佈局管理器、設置分割線或者分割空間、set item的高度是固定的
//addOnScrollListener(//幾乎很RecycleView同樣,下拉刷新)
三、PtrFrameLayout:(須要導包,依賴項)
//佈局:PtrFrameLayout包裹RecyclerView
//有兩種:
①、旋轉圓圈的header(相似SwipeRefreshLayout)
Ⅰ、new一個StoreHouseHeader header,而後設置:
header.setBackgroundColor
header.setTextColor
header.initWithString("LOADING...")
Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
Ⅲ、綁定UI與刷新狀態的監聽:ptrFrameLayout.addPtrUIHandler(header);
Ⅳ、添加刷新動做監聽:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)
②、默認的經典header(相似pullTorefresh效果)
Ⅰ 、new一個PtrClassicDefaultHeader
Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
Ⅲ、綁定UI與刷新狀態的監聽:ptrFrameLayout.addPtrUIHandler(header);
Ⅳ、添加刷新動做監聽:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)
// 刷新完成,讓刷新Loading消失
ptrFrameLayout_main.refreshComplete();
4、RecyclerView的適配器
Ⅰ 、自定義適配器繼承 RecyclerView.Adapter<RecyclerView.ViewHolder>
導包正確的化能夠簡寫成Adapter<ViewHolder>
Ⅱ、聲明屬性,Context 、 數據源 、 LayoutInflater
構造器初始化
Ⅲ、重寫方法:
onCreateViewHolder(parent , typeView):填充View,並返回new ViewHolder(view)
onBindViewHolder(holder , position);賦值,並加載圖片
getItemId(position)
Ⅳ、ViewHolder內部類 繼承 RecyclerView.ViewHolder
聲明UI控件,構造器初始化
Ⅴ、從新加載數據:reloadListView(數據源 、 isClear)
Ⅵ、額外的方法:
notifyDataSetChanged()
notifyItemInserted(position)
notifyItemRangeInserted(positionStart, itemCount)
notifyItemRemoved(position)
notifyItemChanged(position)
Ⅶ、若是須要設置單擊監聽、長按監聽
一、interface OnItemClickedListener:兩個抽象方法
void onItemClick(int position)
boolean onItemLongClick(int position)
二、聲明接口對象:listener、聲明RecyclerView對象,並在構造器中傳入RecyclerView對象
三、setOnItemClickedListener(接口對象){this.listener = listener}
四、ViewHolder要實現View的單擊、長按監聽器
五、重寫單擊監聽器
if (listener != null) {
int position = recyclerView.getChildPosition(v)
listener.onItemClick(position)
}
長按監聽器:
if (listener != null) {
int position = recyclerView.getChildPosition(v)
return listener.onItemLongClick(position)
}
return false
六、主頁就能夠調用setOnItemClickedListener(new ...)
附CardView:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:elevation="5dp"
app:cardCornerRadius="10dp">
</android.support.v7.widget.CardView>