RecyclerView是android-support-v7-21版本中新增的一個Widget,官方介紹RecyclerView 是 ListView 的升級版本,更加先進和靈活。
開發環境
- IDE: ADT
- SDK: Android L
首先(如何導入recycleview.jar包)在Android SDK Manager上下載Android Support Repository,
它會在sdk/extras/android目錄下生成m2repository目錄,
進入RecycleView目錄。用解壓文件打開recyclerview-v7-21.0.0-rc1.aar文件,將claaes.jar改名recycleview.jar後放入工程libs文件夾。
如果想在ADT中關聯源代碼,可以在libs下新建文件
recycleview.jar.properties
編輯
src=D:\\adt-bundle-windows-x86_64-20131030\\sdk\\extras\\android\\m2repository\\com\\android\\support\\recyclerview-v7\\21.0.0-rc1\\recyclerview-v7-21.0.0-rc1-sources.jar
右鍵項目close project,然後open project這樣就可以關聯源代碼了。
創建項目如圖
布局文件中使用 RecyclerView
[html]view plaincopy
-
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- android:id="@+id/recyclerView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
-
Activity中
[java]view plaincopy
- packagecom.leigo.recyclerview;
-
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.support.v7.widget.LinearLayoutManager;
- importandroid.support.v7.widget.RecyclerView;
-
- /**
- *@ClassNameRecyclerViewActivity
- *@DescriptionTODO
- *@authorGaoLei
- *@date2014-7-2
- */
- publicclassRecyclerViewActivityextendsActivity{
-
- privatestaticfinalStringTAG=RecyclerViewActivity.class
- .getSimpleName();
-
- privateRecyclerViewmRecyclerView;
-
- /**
- *@Method:onCreate
- *@Description:TODO
- *@paramsavedInstanceState
- *@seeandroid.app.Activity#onCreate(android.os.Bundle)
- */
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_recycle_view);
-
- mRecyclerView=(RecyclerView)findViewById(R.id.recyclerView);
-
- LinearLayoutManagerlayoutManager=newLinearLayoutManager(this);
- //layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
- //設置布局管理器
- mRecyclerView.setLayoutManager(layoutManager);
-
- String[]dataset=newString[100];
- for(inti=0;i dataset[i]="item"+i;
- }
- RecyclerAdaptermAdapter=newRecyclerAdapter(dataset);
- mRecyclerView.setAdapter(mAdapter);
- }
-
- }
-
RecyclerView 一個特點就是,將 layout 抽象成了一個 LayoutManager,RecylerView 不負責子 View 的布局, 我們可以自定義 LayoutManager 來實現不同的布局效果, 目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默認是垂直, 可以指定水平, 這樣就輕松實現了水平的 ListView。
Adapter
[java]view plaincopy
- packagecom.leigo.recyclerview;
-
- importandroid.support.v7.widget.RecyclerView;
- importandroid.support.v7.widget.RecyclerView.Adapter;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.TextView;
-
- /**
- *@ClassNameRecyclerAdapter
- *@DescriptionTODO
- *@authorGaoLei
- *@date2014-7-2
- */
- publicclassRecyclerAdapterextendsAdapter{
- privateString[]mDataset;
-
- /**
- *@Description:TODO
- */
- publicRecyclerAdapter(String[]dataset){
- mDataset=dataset;
- }
-
- publicstaticclassViewHolderextendsRecyclerView.ViewHolder{
-
- publicTextViewmTextView;
-
- /**
- *@Description:TODO
- *@paramitemView
- */
- publicViewHolder(ViewitemView){
- super(itemView);
- mTextView=(TextView)itemView;
- }
- }
-
- /**
- *@Method:getItemCount
- *@Description:TODO
- *@return
- *@seeandroid.support.v7.widget.RecyclerView.Adapter#getItemCount()
- */
- @Override
- publicintgetItemCount(){
- returnmDataset.length;
- }
-
- /**
- *@Method:onBindViewHolder
- *@Description:TODO
- *@paramholder
- *@paramposition
- *@seeandroid.support.v7.widget.RecyclerView.Adapter#onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder,
- *int)
- */
- @Override
- publicvoidonBindViewHolder(ViewHolderholder,intposition){
- holder.mTextView.setText(mDataset[position]);
- }
-
- /**
- *@Method:onCreateViewHolder
- *@Description:TODO
- *@paramparent
- *@paramviewType
- *@return
- *@seeandroid.support.v7.widget.RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup,
- *int)
- */
- @Override
- publicViewHolderonCreateViewHolder(ViewGroupparent,intviewType){
- Viewview=View.inflate(parent.getContext(),
- android.R.layout.simple_list_item_1,null);
- ViewHolderholder=newViewHolder(view);
- returnholder;
- }
- }
RecyclerView 的另一個特點是標准化了 ViewHolder, 編寫 Adapter 面向的是 ViewHoder 而不在是View 了, 復用的邏輯被封裝了, 寫起來更加簡單。
截圖