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

开发环境

- IDE: ADT

 - SDK: Android L

首先在Android SDK Manager上下载Android Support Repository,

它会在sdk/extras/android文件夹下生成m2repository文件夹,

进入RecycleView文件夹。用解压文件打开recyclerview-v7-21.0.0-rc1.aar文件,将claaes.jar改名后放入lib文件夹。

假设想在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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

Activity中

package com.leigo.recyclerview;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; /**
* @ClassName RecyclerViewActivity
* @Description TODO
* @author GaoLei
* @date 2014-7-2
*/
public class RecyclerViewActivity extends Activity { private static final String TAG = RecyclerViewActivity.class
.getSimpleName(); private RecyclerView mRecyclerView; /**
* @Method: onCreate
* @Description: TODO
* @param savedInstanceState
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle_view); mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
// 设置布局管理器
mRecyclerView.setLayoutManager(layoutManager); String[] dataset = new String[100];
for (int i = 0; i < dataset.length; i++) {
dataset[i] = "item" + i;
}
RecyclerAdapter mAdapter = new RecyclerAdapter(dataset);
mRecyclerView.setAdapter(mAdapter);
} }<strong>
</strong>

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

Adapter

package com.leigo.recyclerview;

import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; /**
* @ClassName RecyclerAdapter
* @Description TODO
* @author GaoLei
* @date 2014-7-2
*/
public class RecyclerAdapter extends Adapter<RecyclerAdapter.ViewHolder> {
private String[] mDataset; /**
* @Description: TODO
*/
public RecyclerAdapter(String[] dataset) {
mDataset = dataset;
} public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; /**
* @Description: TODO
* @param itemView
*/
public ViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView;
}
} /**
* @Method: getItemCount
* @Description: TODO
* @return
* @see android.support.v7.widget.RecyclerView.Adapter#getItemCount()
*/
@Override
public int getItemCount() {
return mDataset.length;
} /**
* @Method: onBindViewHolder
* @Description: TODO
* @param holder
* @param position
* @see android.support.v7.widget.RecyclerView.Adapter#onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder,
* int)
*/
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
} /**
* @Method: onCreateViewHolder
* @Description: TODO
* @param parent
* @param viewType
* @return
* @see android.support.v7.widget.RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup,
* int)
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(),
android.R.layout.simple_list_item_1, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
}

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

截图







Android学习之RecyclerView的更多相关文章

  1. Android学习之RecyclerView初探究

    •RecyclerView基本用法 RecyclerView是新增的控件,为了让 RecyclerView 在所有 Android 版本上都能使用; Android 团队将 RecyclerView ...

  2. android 学习之RecyclerView

    RecyclerView:ListView的升级版,它提供了更好的性能而且更容易使用.该控件是一个可以装载大量的视图集合,并且可以非常效率的进行回收和滚动.当你list中的元素经常动态改变时可以使用R ...

  3. Android学习——利用RecyclerView编写聊天界面

    1.待会儿会用到RecyclerView,首先在app/build.gradle(注意有两个build.gradle,选择app下的那个)当中添加依赖库,如下: dependencies { comp ...

  4. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  5. Android 高级编程 RecyclerView 控件的使用

    RecyclerView 是Android 新添加的一个用来取代ListView的控件,它的灵活性与可替代性比listview更好. 看一下继承关系: ava.lang.Object    ↳ and ...

  6. (转)Android学习路线总结,绝对干货

    一.前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知.懂的越多的时候你才会发现懂的越少. 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大. ...

  7. Android学习路线总结,绝对干货(转)

    转自:https://www.cnblogs.com/yishaochu/p/5436094.html 一.前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉 ...

  8. Android学习之两款下拉刷新库分享

    昨天没有写博客.心里非常罪过呀,今天给大家写两种比較常见的下拉刷新的用法.一款是SwipeRefreshLayout,一款是CircleRefreshLayout. SwipeRefreshLayou ...

  9. Android学习路线总结,绝对干货(转)

    title: Android学习路线总结,绝对干货tags: Android学习路线,Android学习资料,怎么学习androidgrammar_cjkRuby: true--- 一.前言 不知不觉 ...

随机推荐

  1. ecshop加广告出现广告位的宽度值必须在1到1024之间的解决方法

    ecshop加广告出现广告位的宽度值必须在1到1024之间,这点是非常郁闷的,因为现在宽屏网站逐渐成为主流,越来越多的宽屏网站进入了我们的视线,比如京东啊,一号店啊. 但是ecshop的广告位却不能超 ...

  2. cocos2d-x: 33种切换场景

    [1]:CCTransitionCrossFade::create(时间,目标场景); //慢慢淡化到还有一场景 [2]:CCTransitionFade::create(时间,目标场景); //本场 ...

  3. C++ 中的比較函数

    在敲代码的时候,排序是一种和经常使用的算法.在排序中.比較又是当中最经常使用的操作.这里,我们来分析一下C++中的比較问题. 当中,基本数据类型int. float.string等已经提供了默认的比較 ...

  4. 使用ToggleButton和StackPanel+Border实现圆角开关按钮动画效果

    <ToggleButton Height=" HorizontalAlignment="Left" Margin="138,122,0,0" N ...

  5. freemarker 里 ?? 和 ? 都是什么意思

    ??是推断对象是否为空,比如:<#if object??>object对象不为空(即object存在)</#if> ?后面要加keyword,比如:<#if object ...

  6. 【原创】leetCodeOj --- Binary Tree Right Side View 解题报告

    二连水 题目地址: https://leetcode.com/problems/binary-tree-right-side-view/ 题目内容: Given a binary tree, imag ...

  7. play framework2.5.

    play framework2 的学习笔记 https://github.com/playframework/playframework https://github.com/playframewor ...

  8. Linux下PS命令详解 (转)

    要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1)ps :是显示瞬间进程的状态,并不动态连续: (2)top:如果想对进程运行时间监控,应该用 top 命令 ...

  9. [LeetCode283]Move Zeros将一个数组中为0的元素移至数组末尾

    题目: Given an array nums, write a function to move all 0's to the end of it while maintaining the rel ...

  10. C#中的预编译指令介绍

    原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...