Android学习之RecyclerView

RecyclerView是android-support-v7-21版本中新增的一个Widget,官方介绍RecyclerView 是 ListView 的升级版本,更加先进和灵活。


开发环境

 - IDE: ADT
 - SDK: Android L


首先(如何导入recycleview.jar包)在Android SDK Manager上下载Android Support Repository,

Android学习之RecyclerView_第1张图片

它会在sdk/extras/android目录下生成m2repository目录,

Android学习之RecyclerView_第2张图片

进入RecycleView目录。用解压文件打开recyclerview-v7-21.0.0-rc1.aar文件,将claaes.jar改名recycleview.jar后放入工程libs文件夹。

Android学习之RecyclerView_第3张图片


如果想在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这样就可以关联源代码了。


创建项目如图

Android学习之RecyclerView_第4张图片


布局文件中使用 RecyclerView

[html]  view plain  copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <android.support.v7.widget.RecyclerView  
  7.         android:id="@+id/recyclerView"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent" />  
  10.   
  11. </RelativeLayout>  

Activity中

[java]  view plain  copy
 
  1. package com.leigo.recyclerview;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.support.v7.widget.LinearLayoutManager;  
  6. import android.support.v7.widget.RecyclerView;  
  7.   
  8. /** 
  9.  * @ClassName RecyclerViewActivity 
  10.  * @Description TODO 
  11.  * @author GaoLei 
  12.  * @date 2014-7-2 
  13.  */  
  14. public class RecyclerViewActivity extends Activity {  
  15.   
  16.     private static final String TAG = RecyclerViewActivity.class  
  17.             .getSimpleName();  
  18.   
  19.     private RecyclerView mRecyclerView;  
  20.   
  21.     /** 
  22.      * @Method: onCreate 
  23.      * @Description: TODO 
  24.      * @param savedInstanceState 
  25.      * @see android.app.Activity#onCreate(android.os.Bundle) 
  26.      */  
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.activity_recycle_view);  
  31.   
  32.         mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);  
  33.   
  34.         LinearLayoutManager layoutManager = new LinearLayoutManager(this);  
  35. //      layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);  
  36.         // 设置布局管理器  
  37.         mRecyclerView.setLayoutManager(layoutManager);  
  38.   
  39.         String[] dataset = new String[100];  
  40.         for (int i = 0; i < dataset.length; i++) {  
  41.             dataset[i] = "item" + i;  
  42.         }  
  43.         RecyclerAdapter mAdapter = new RecyclerAdapter(dataset);  
  44.         mRecyclerView.setAdapter(mAdapter);  
  45.     }  
  46.   
  47. }<strong>  
  48. </strong>  


RecyclerView 一个特点就是,将 layout 抽象成了一个 LayoutManager,RecylerView 不负责子 View 的布局, 我们可以自定义 LayoutManager 来实现不同的布局效果, 目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默认是垂直, 可以指定水平, 这样就轻松实现了水平的 ListView。


Adapter

[java]  view plain  copy
 
  1. package com.leigo.recyclerview;  
  2.   
  3. import android.support.v7.widget.RecyclerView;  
  4. import android.support.v7.widget.RecyclerView.Adapter;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.TextView;  
  8.   
  9. /** 
  10.  * @ClassName RecyclerAdapter 
  11.  * @Description TODO 
  12.  * @author GaoLei 
  13.  * @date 2014-7-2 
  14.  */  
  15. public class RecyclerAdapter extends Adapter<RecyclerAdapter.ViewHolder> {  
  16.     private String[] mDataset;  
  17.   
  18.     /** 
  19.      * @Description: TODO 
  20.      */  
  21.     public RecyclerAdapter(String[] dataset) {  
  22.         mDataset = dataset;  
  23.     }  
  24.   
  25.     public static class ViewHolder extends RecyclerView.ViewHolder {  
  26.   
  27.         public TextView mTextView;  
  28.   
  29.         /** 
  30.          * @Description: TODO 
  31.          * @param itemView 
  32.          */  
  33.         public ViewHolder(View itemView) {  
  34.             super(itemView);  
  35.             mTextView = (TextView) itemView;  
  36.         }  
  37.     }  
  38.   
  39.     /** 
  40.      * @Method: getItemCount 
  41.      * @Description: TODO 
  42.      * @return 
  43.      * @see android.support.v7.widget.RecyclerView.Adapter#getItemCount() 
  44.      */  
  45.     @Override  
  46.     public int getItemCount() {  
  47.         return mDataset.length;  
  48.     }  
  49.   
  50.     /** 
  51.      * @Method: onBindViewHolder 
  52.      * @Description: TODO 
  53.      * @param holder 
  54.      * @param position 
  55.      * @see android.support.v7.widget.RecyclerView.Adapter#onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, 
  56.      *      int) 
  57.      */  
  58.     @Override  
  59.     public void onBindViewHolder(ViewHolder holder, int position) {  
  60.         holder.mTextView.setText(mDataset[position]);  
  61.     }  
  62.   
  63.     /** 
  64.      * @Method: onCreateViewHolder 
  65.      * @Description: TODO 
  66.      * @param parent 
  67.      * @param viewType 
  68.      * @return 
  69.      * @see android.support.v7.widget.RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup, 
  70.      *      int) 
  71.      */  
  72.     @Override  
  73.     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
  74.         View view = View.inflate(parent.getContext(),  
  75.                 android.R.layout.simple_list_item_1, null);  
  76.         ViewHolder holder = new ViewHolder(view);  
  77.         return holder;  
  78.     }  
  79. }  

RecyclerView 的另一个特点是标准化了 ViewHolder, 编写 Adapter 面向的是 ViewHoder 而不在是View 了, 复用的逻辑被封装了, 写起来更加简单。


截图



Android学习之RecyclerView_第5张图片

你可能感兴趣的:(Android学习之RecyclerView)