首先来实现最简单的列表展示,如图

在这个展示中,RecyclerView的作用仅限于回收和定位屏幕上的TextView,在用户滑动屏幕时,会把上一个视图回收掉,并显示下一个页面的视图,也就是回收再利用。

使用RecyclerView离不开2个类的使用:ViewHolder和Adapter,ViewHolder用于容纳用于显示的View视图,由Adapter将数据设置到要显示的视图中,再让RecyclerView设置该适配器来达到显示效果。

使用RecyclerView需要支持库,在Eclipse中引入v7包添加引用即可,在AndroidStudio中,单击File → Project Structure....菜单项切换至项目结构窗口,选择左边的app模块,然后单击 Dependencies选项页。单击+按钮弹出依赖库添加窗口。 找到并选择recyclerview-v7支持库,单击OK按钮完成依赖库添加,如图

在布局文件中定义RecyclerView(Activity_main.xml):

<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>

代码编写:(MainActivity.java)

public class MainActivity extends AppCompatActivity {
private RecyclerView my_recycler_view;
private MyAdapter mMyAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my_recycler_view = (RecyclerView) findViewById(R.id.my_recycle_view);
//RecyclerView视图创建完毕后就转交给LayoutManager对象
my_recycler_view.setLayoutManager(new LinearLayoutManager(getBaseContext()));
mMyAdapter = new MyAdapter(getListRes());//创建适配器对象
my_recycler_view.setAdapter(mMyAdapter);//设置适配器
} public List<String> getListRes() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("hello_world--->" + i);
}
return list;
} //创建ViewHolder类用于显示视图
private class MyHolder extends RecyclerView.ViewHolder { public TextView tv_title; public MyHolder(View itemView) {
super(itemView);
tv_title = (TextView) itemView;
}
} //创建Adapter
private class MyAdapter extends RecyclerView.Adapter<MyHolder> { private List<String> mList; public MyAdapter(List<String> list) {
mList = list;//获取数据资源
} @Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getBaseContext()).inflate(android.R.layout
.simple_list_item_1,
parent, false);
return new MyHolder(view);
} @Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.tv_title.setText(mList.get(position) + "");//给holder里的view设置内容
} @Override
public int getItemCount() {
return mList.size();//返回资源数据的长度
}
}
} 上面的代码中分别创建了继承Recycler.ViewHolder和RecyclerAdapter<VH>的2个类MyHolder和MyAdapter,MyAdapter的onCreateViewHolder()设置view,传给MyHolder,在MyHolder的构造函数中获取控件对象,然后在onBindViewHolder()方法中为MyHolder的view设值。最后让RecyclerView设置该适配器即可。 现在进一步增加布局的复杂度,创建一个新的布局文件(list_item_layout)
<?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="wrap_content"> <ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_icon"/> <TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title"
android:layout_toRightOf="@id/iv_icon"/>
</RelativeLayout>

添加获取数据的代码:
public List<String> getListContent(){
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("android--->" + i);
}
return list;
} 修改MyAdapter的内容
private class MyAdapter extends RecyclerView.Adapter<MyHolder> {

    private List<String> mListTitle, mListContent;

    public MyAdapter(List<String> listTitle, List<String> listContent) {
mListTitle = listTitle;//获取数据资源
mListContent = listContent;
} @Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.list_item_layout,
parent, false);
return new MyHolder(view);
} @Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.tv_title.setText(mListTitle.get(position) + "");//给holder里的view设置内容
holder.tv_content.setText(mListContent.get(position) + "");
holder.iv_icon.setImageResource(R.mipmap.ic_launcher);
} @Override
public int getItemCount() {
return mListTitle.size();//返回资源数据的长度
}
}

修改MyHolder的内容:
public TextView tv_title;
public TextView tv_content;
public ImageView iv_icon; public MyHolder(View itemView) {
super(itemView);
tv_title = (TextView) itemView.findViewById(R.id.tv_title);
tv_content = (TextView) itemView.findViewById(R.id.tv_content);
iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);
}
再将创建适配器对象代码改为
mMyAdapter = new MyAdapter(getListRes(),getListContent());//创建适配器对象

就实现了简单的自定义布局展示的效果:

												

Android之RecyclerView入门的更多相关文章

  1. android 开发从入门到精通

    Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...

  2. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  3. [Android]使用RecyclerView替代ListView(三)

    以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html  这次来使用RecyclerView实现Pinn ...

  4. [Android]使用RecyclerView替代ListView(二)

    以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4242541.html 以前写过一篇“[Android]使用Adapte ...

  5. [Android]使用RecyclerView替代ListView(一)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4232560.html RecyclerView是一个比List ...

  6. Android Studio单元测试入门

    Android Studio单元测试入门 通常在开发Android app的时候经常会写一些小函数并验证它是否运行正确,通常做法我们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程 ...

  7. 下面就介绍下Android NDK的入门学习过程(转)

    为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...

  8. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  9. 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...

随机推荐

  1. 冒泡排序的python代码实现

    li = [33, 2, 10, 1,564,880,8,99,51,3]# for i in range(len(li) - 1):#     current = li[i]#     next_v ...

  2. 解密Lazy<T>

    1.Lazy<T>的使用 无意间看到一段代码,在创建对象的时候使用了Lazy,顾名思义Lazy肯定是延迟加载,那么它具体是如何创建对象,什么时候创建对象了? 先看这段示列代码: publi ...

  3. 学习笔记TF020:序列标注、手写小写字母OCR数据集、双向RNN

    序列标注(sequence labelling),输入序列每一帧预测一个类别.OCR(Optical Character Recognition 光学字符识别). MIT口语系统研究组Rob Kass ...

  4. redis学习(2)--- Redis概述

    一.Redis介绍 高性能键值对数据库,支持的键值对数据类型: 字符串类型 列表类型 有序集合类型 散列类型 集合类型 官方测试读写速度: 测试50个并发程序,执行10万次请求 读的速度:每秒11万次 ...

  5. AES加密解密算法---java

    package com.BFGJ.AES; import java.util.Random; import java.util.StringTokenizer; import javax.crypto ...

  6. 初学unslider

    1.关于unslider下载 官方提供的下载页面是http://www.bootcss.com/p/unslider/,但总是进不了下载页面,所以我就查看主页的源码,找到unslider.min.js ...

  7. Bash Shell编程要点小结

    一.case命令 case variable invalue1) command(s);; value2) command(s);; *) command(s);; esac 如果case变量没有被匹 ...

  8. javascript基础数据类型与引用类型

    javascript一共有6种数据类型 有5种基本类型:Null,String Number,Boolean,Undefined 和一种引用类型Object 基础类型在内存中存在于栈空间中,例如 va ...

  9. Linux网络服务12——NFS共享服务

    Linux网络服务12--NFS共享服务 一.NFS简介 端口号:TCP.UDP 111端口 NFS(Network File System)网络文件系统,是一种基于TCP/IP传输的网络文件系统协议 ...

  10. 你应该知道的jQuery技巧【收藏】

    jQuery的存在,让学习前端开发的人感到前端越来越容易入门了,用简单的几行代码就可以实现需求,但是,你真的会用jQuery么,当代码运行 后无法看到自己预期的效果,是不是觉得jQuery出了问题,其 ...