轉發請備註原創地址:https://www.niwoxuexi.com/blog/android/article/197.html
RecyclerView是Android L版本中新添加的一個用來取代ListView的SDK,相信大家肯定不陌生了,大家可以通過導入support-v7對其進行使用。
首先我們先看一下官方的介紹:
RecyleView部件比 ListView 更高級且更具靈活性。 此小部件是一個用於顯示龐大數據集的容器,可通過保持有限數量的視圖進行非常有效的滾動操作。 如果您有數據集合,其中的元素將因用戶操作或網絡事件而在運行時發生改變,請使用RecyleView小部件。
RecyclerView
類別將通過提供下列功能簡化龐大數據集的顯示與處理:
- 用於項目定位的佈局管理器
- 用於通用項目操作(例如刪除或添加項目)的默認動畫
您也可靈活選擇如何爲 RecyclerView
小部件定義自定義佈局管理器與動畫。
圖 1. RecyclerView
小部件。
如果要使用 RecyclerView
小部件,您必須指定一個適配器和一個佈局管理器。 如果要創建一個適配器,請擴展 <code>RecyclerView.Adapter 類別。實現的詳情將取決於數據集的具體信息以及視圖的類型。 如果要了解更多信息,請參閱下列示例。
佈局管理器將確定 RecyclerView
內各項目視圖的位置並決定何時重新使用用戶已不可見的項目視圖。如果要重新使用(或重複使用)一個視圖,佈局管理器可能會要求適配器以數據集中的另一個元素替換視圖的內容。
以此方式重複使用視圖將可避免創建不必要的視圖或執行成本高昂的 findViewById()
查找,從而改善性能。
RecyleView提供這些內置佈局管理器:
LinearLayoutManager
以垂直或水平滾動列表方式顯示項目。
GridLayoutManager
在網格中顯示項目。
StaggeredGridLayoutManager
在分散對齊網格中顯示項目。
上面就是官網上的介紹,大家仔細閱讀:
下面我總結一下他的使用:
1,要控制其顯示的方式,請通過佈局管理器LayoutManager
2,要控制Item間的間隔(可繪製),請通過ItemDecoration
3,要控制Item增刪的動畫,請通過ItemAnimator
4,要控制點擊、長按事件,請自己寫(擦,這點尼瑪。)
如下代碼:
mRecyclerView = findView(R.id.id_recyclerview); //設置佈局管理器 mRecyclerView.setLayoutManager(layout); //設置adapter mRecyclerView.setAdapter(adapter) //設置Item增加、移除動畫 mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //添加分割線 mRecyclerView.addItemDecoration(new DividerItemDecoration( getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
第一部分、簡單的RecyleView使用
1,添加依賴
在AS的build.gradle中添加依賴,然後同步一下就可以引入依賴包:
dependencies { ... compile 'com.android.support:recyclerview-v7:25.3.1' }
2,佈局文件中添加RecylerView
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
3,在MainActivity中聲明LaoutManager 和 Adapter
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); //創建默認的線性LayoutManager LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能 mRecyclerView.setHasFixedSize(true); //創建並設置Adapter MyAdapter mAdapter = new MyAdapter(initData()); mRecyclerView.setAdapter(mAdapter);
4,創建Adapter
1,首先要自定義一個ViewHolder
2,覆蓋父類的三個函數,直接看代碼(裏面有註釋)
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { public String[] datas = null; public MyAdapter(String[] datas) { this.datas = datas; } //創建新View,被LayoutManager所調用 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler, parent, false); MyViewHolder vh = new MyViewHolder(view); return vh; } //將數據與界面進行綁定的操作 @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(datas[position]); } //獲取數據的數量 @Override public int getItemCount() { return datas.length; } //自定義的ViewHolder,持有每個Item的的所有界面元素 class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View view) { super(view); tv = (TextView) view.findViewById(R.id.text); } } }
好了,運行代碼,就可以看到效果了
上面是實現了一個類似ListView的豎向的佈局,如何你想實現橫向佈局,Grid佈局,和瀑布流,只要給變LayoutManager就可以了
橫向佈局
如果想要一個橫向的List只要設置LinearLayoutManager如下就行,注意要聲明mLayoutManager的類型是LinearLayoutManager而不是父類LayoutManager:
mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
Grid佈局
如果想要一個Grid佈局的列表,只要聲明LayoutManager爲GridLayoutManager即可:
mLayoutManager = new GridLayoutManager(context,columNum); mRecyclerView.setLayoutManager(mLayoutManager);
注意,在Grid佈局中也可以設置列表的Orientation屬性,來實現橫向和縱向的Grid佈局。
瀑布流佈局
瀑布流就使用StaggeredGridLayoutManager即可:
mLayoutManager = new StaggeredGridLayoutManager(int spanCount, int orientation); mRecyclerView.setLayoutManager(mLayoutManager);
總結
本節介紹的是一個最最簡單的RecyclerView的使用方法,後面將介紹一些更高級的用法。
最後又要上代碼了:下載地址:https://image.niwoxuexi.com/blog/download/RecyleVi...