tags: 新建,模板,小书匠

RecyclerView 是 Android 团队新推出的控件,不仅能轻松实现 ListView 的同样的效果,还优化了 ListView 中许多不足之处。

目前 Android 团队是更推荐我们使用 Recycler 的。

为了能在多版本的 Android 系统中使用,Android 团队把它定义在了 support 库中,想要使用需要在 build.gradle 中添加依赖库。

在 Android Studio 中选用 Project Files 视图,打开 app/build.gradle 文件,在 dependencies 闭包中添加

compile 'com.android.support:recyclerview-v7:24.2.1'

然后点一下 Sncy Now 来进行同步,然后修改 activity_main.xml

    <android.support.v7.widget.RecyclerView
android:id="@+id/hero_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />

这里 AS(Android Studio)非常方便的提示了剩下的代码,很方便

然后像 ListView 一样,为它设计一个子项样式,新建一个 hero_item.xml

hero_item.xml

 <ImageView
android:id="@+id/hero_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher" /> <TextView
android:id="@+id/hero_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="TextView" />

当然还要一个实体类用来做为 RecyclerView 的适配类型

Hero.java

public class Hero {
private String name;
private int imageId; public Hero(String name, int imageId) {
this.name = name;
this.imageId = imageId;
} public void setName(String name) {
this.name = name;
} public void setImageId(int imageId) {
this.imageId = imageId;
} public String getName() { return name;
} public int getImageId() {
return imageId;
}
}

然后就要为 Recycler 准备一个适配器了

新建一个 HeroAdapter.java,然后让这个适配器类继承 RecyclerView.Adapter,并将泛型指定为 HeroAdapter.ViewHolder。

其中 ViewHoler 是我们在 HeroAdapter 定义的一个内部类

HeroAdapter.java

public class HeroAdapter extends RecyclerView.Adapter<HeroAdapter.ViewHolder> {

    private List<Hero> mHerolist;
static class ViewHolder extends RecyclerView.ViewHolder {
View heroView;
ImageView hero_image;
TextView hero_name;
public ViewHolder(View itemView) {
super(itemView);
heroView=itemView;
hero_image= (ImageView) itemView.findViewById(R.id.hero_image);
hero_name= (TextView) itemView.findViewById(R.id.hero_text);
}
} public HeroAdapter(List<Hero> heroList){
mHerolist=heroList;
} public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.hero_item,parent,false);
ViewHolder holder=new ViewHolder(view);
return holder;
} public void onBindViewHolder(ViewHolder holder, int position) {
Hero hero=mHerolist.get(position);
holder.hero_image.setImageResource(hero.getImageId());
holder.hero_name.setText(hero.getName()); } public int getItemCount() {
return mHerolist.size();
}
}

上面代码看着很多,其实大部分 AS会帮我们写好,并且代码逻辑清晰,很好理解。

首先定义一个内部类 ViewHolder,然后这个内部类要继承 RecyclerView.ViewHolder,然后要传入一个构造函数 View,这个参数通常是 RecyclerView 的子项最外层布局,所以我们可以通过 findViewById 来获取布局中的实例。

接着要有个构造函数 HeroAdapter,作用是把 RecyclerView 的数据源传进来,并赋给一个全局变量,作为全局数据,因为我们后续操作都需要这数据源。

最后是继承了 RecyclerView.Adapter 要重写的三个方法:

  • onCreateViewHolder 是用于创建 ViewHolder 实例的。

    我们先把 hero_item.xml 加载进来

    代码已经在 ListView 那篇解释过了

    然后创建一个 ViewHodler 实例,并把加载出来的 View 布局添加到 ViewHoder 里面去,最后返回 ViewHodler 的实例。

  • onBindViewHolder 主要用来绑定数据

    我们通过 position 得出当前项的数值,然后绑定即可。

  • getItemCount 用于告诉 RecyclerView 有多少项,直接返回数据源长度即可。

最后我们来到 MainActivity.java 中

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private List<Hero> heroList=new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initHero();
>>** RecyclerView recyclerView= (RecyclerView) findViewById(R.id.hero_recycler); **<<
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
HeroAdapter heroAdapter=new HeroAdapter(heroList);
recyclerView.setAdapter(heroAdapter);
}
public void initHero(){
for (int i=0;i<2;i++) {
Hero lin=new Hero("lin",R.drawable.b2);
heroList.add(lin);
Hero delia=new Hero("delia",R.drawable.b3);
heroList.add(delia);
Hero fire=new Hero("fire",R.drawable.b4);
heroList.add(fire);
Hero saber=new Hero("saber",R.drawable.b5);
heroList.add(saber);
Hero christina=new Hero("christina",R.drawable.b6);
heroList.add(christina);
Hero dva=new Hero("dva",R.drawable.b9);
heroList.add(dva);
}
}
}

代码比较简单,就不解释了


使用RecyclerView的更多相关文章

  1. RecyclerView使用大全

    RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...

  2. 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载

    title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...

  3. 安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

    针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest ...

  4. Android Studio开发RecyclerView遇到的各种问题以及解决(二)

    开发RecyclerView时候需要导入别人的例子,我的是从github导入的,下载下github的压缩包之后解压看你要导入的文件是priject还是Module.(一般有app文件夹的大部分是pro ...

  5. Android Studio开发RecyclerView遇到的各种问题以及解决(一)

    以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...

  6. Android的Kotlin秘方(II):RecyclerView 和 DiffUtil

    作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支 ...

  7. Android RecyclerView 实现支付宝首页效果

    Android RecyclerView 实现支付宝首页效果 [TOC] 虽然我本人不喜欢支付宝的,但是这个网格本身其实还是不错的,项目更新中更改了一个布局为网格模式,类似支付宝.(估计是产品抄袭的= ...

  8. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  9. 打造android偷懒神器———RecyclerView的万能适配器

    转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...

  10. 安卓v7支持包下的ListView替代品————RecyclerView

    RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 项目已经同步至github:https://github.com/ ...

随机推荐

  1. ASP.NET for WebApi

    WebApi,听说过吧?呵呵. 感觉比WebService,WCF要强.尤其是那个啥WCF,啥鬼东西,真难懂.真难搞.真难用. 说比WebService要强,是因为不用在本地先生成个代理.而且XML也 ...

  2. yummain.py install yum 不能运行的原因 yummain.py not found

    [root@akinlau ~] wget http://tel.mirrors.163.com/centos/6/os/x86_64/Packages/python-urlgrabber-3.9.1 ...

  3. CRM 配置 ADFS后,使用自定义STS遇到的问题总结

    1 登录ADFS服务查看 ADFS日志 2 根据日志提示的错误,设置ADFS对应的属性 (Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust  ...

  4. 添加和删除节点(HTML元素)

    创建新的HTML元素 <div id="div1"> <p id="p1">这是一个段落</p> <p id=&quo ...

  5. 并不对劲的bzoj4560:p3269:[JLOI2016]字符串覆盖

    题目大意 \(T\)(\(T\leq10\))组询问 每组询问给出一个字符串\(A\)(\(|A|\leq10^4\)),\(n\)(\(n\leq4\))个\(A\)的子串\(B_1,B_2,B_3 ...

  6. 并不对劲的bzoj4825:loj2018:p3721:[HNOI2017]单旋

    题目大意 spaly是一种数据结构,它是只有单旋的splay 有一个初始为空的spaly,\(m\)(\(m\leq10^5\))次操作,每个操作是以下5种中的一种: 1.向spaly中插入一个数(过 ...

  7. Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串

    ylbtech-Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串 1.返回顶部 1. Java 实例 - 连接字符串  Java 实例 以下实例演示了通过 &qu ...

  8. 使用jQuery的tab控件

    以前写winform程序的时候tab控件是非常容易使用的,写网页时确费了我不少劲,主要原因是jQuery的混乱. 有很多前端控件都提供tab,像bootstrap等,这里只说jQuery的. 下载相应 ...

  9. adb: command not found 解決方法(转载)

    转自:http://a7419.pixnet.net/blog/post/59806205-adb%3A-command-not-found--%E8%A7%A3%E6%B1%BA%E6%96%B9% ...

  10. Swift4 协议

    创建: 2018/02/27 完成: 2018/02/28 更新: 2018/03/07 增加类采用协议时的注意 补充只有类, 结构体, 枚举型可以采用协议 增加为类定义准备的协议( protocol ...