虽然RecyclerView面世有一段时间了,但由于它的学习成本相对较高,很多码友只是粗略的认识了一下而没有细致的品味RecyclerView的真谛。

那么从现在开始我将带你装逼带你飞,一起领略Google工程师们赋予RecyclerView独特的魅力。

首先我们看一下官方文档是怎么介绍RecyclerView的简介:

A flexible view for providing a limited window into a large data set.

Google的工程师写文档还真够精辟的,写的什么鬼?这不等于没写吗?OK,别激动,我们慢慢来。先看看怎么样把RecyclerView跑起来?

接下来简单写一个使用RecyclerView加载网络图片的demo。

布局文件如下:

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

Activity文件如下:

package com.zqlite.android.recyclerviewadvance;

import android.media.Image;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout; import com.squareup.picasso.Picasso; import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private Handler handler = new Handler(); public static final int ADD_DATA_DURATION = 2000; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView(){
recyclerView = (RecyclerView) findViewById(R.id.recyclerView); final RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,3);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setItemAnimator(itemAnimator); final MyAdapter adapter = new MyAdapter();
recyclerView.setAdapter(adapter); handler.postDelayed(new Runnable() {
@Override
public void run() {
adapter.addData();
handler.postDelayed(this, ADD_DATA_DURATION);
layoutManager.scrollToPosition(adapter.getSize());
}
},ADD_DATA_DURATION);
} private class MyAdapter extends RecyclerView.Adapter{ private final String[] imageUrlArray = {
"http://o6p4e1uhv.bkt.clouddn.com/tu24967_22.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/cce4b48f8c5494ee7008eb9528f5e0fe98257eca.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/tu25422_4.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/ad7fd688d43f879424026deed01b0ef41ad53a2e.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/tu25422_6.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/refsdg.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/ggfnvbn.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/sghgfsh.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/asfasdf.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/fsbgbsfg.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/gsfdtrysrtsfdg.jpg",
"http://o6p4e1uhv.bkt.clouddn.com/sdfgsrters.jpg"}; private List<String> datas = new ArrayList<>(); public MyAdapter(){
} public void addData(){
Random random = new Random();
datas.add(imageUrlArray[random.nextInt(imageUrlArray.length)]);
notifyItemInserted(datas.size());
} public int getSize(){
return datas.size();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.LayoutParams reLP = new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT,RecyclerView.LayoutParams.WRAP_CONTENT);
reLP.setMargins(20, 20, 20, 20);
CardView cardView = new CardView(parent.getContext());
cardView.setLayoutParams(reLP); CardView.LayoutParams cLP = new CardView.LayoutParams(parent.getMeasuredWidth()/3,(int)(parent.getMeasuredWidth()/3*1.3));
ImageView imageView = new ImageView(parent.getContext());
imageView.setLayoutParams(cLP);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
cardView.addView(imageView); MyHolder holder = new MyHolder(cardView); return holder;
} @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyHolder myHolder = (MyHolder)holder;
ImageView imageView = myHolder.imageView;
Picasso.with(imageView.getContext()).load(datas.get(position)).into(imageView);
} @Override
public int getItemCount() {
return datas.size();
} private class MyHolder extends RecyclerView.ViewHolder{ public ImageView imageView ;
public MyHolder(View itemView) {
super(itemView);
imageView = (ImageView) ((CardView)itemView).getChildAt(0);
}
}
}
}

使用RecyclerView以下几个东西是必备的:

  1. RecyclerView.LayoutManager
  2. RecyclerView.Adapter

    其中LayoutManager负责布局,Adapter负责数据集。

    该demo运行结果如下:

后面我们对RecyclerView的研究就给予这个demo,demo完整源码地址:

https://github.com/ZhangQinglian/RecyclerViewAdvance

进击的RecyclerView入门一(简单上手)的更多相关文章

  1. 进击的RecyclerView入门三(要是能拖动就好了)

    还是接着上一讲"进击的RecyclerView入门二(来点小装饰?)",在上一讲中我们学到了怎么给不同的Item定制不同的外观,但貌似那个蓝色的框实在太丑了,咱还是把它干了吧. @ ...

  2. 进击的RecyclerView入门二(来点小装饰?)

    接着上一讲,我们看到我们的Demo可以正常的运行,并且能自动加载网络图片,那么为了后面观察的方便,我们取消这种自动加载的功能,使用两个按钮来代替,分别用来增加一个数据和减少一个数据.截图如下: 正在我 ...

  3. [电子书] 《Android编程入门很简单》

    <Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...

  4. Flask入门和快速上手

    目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...

  5. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  6. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  7. Redis入门很简单之六【Jedis常见操作】

    Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...

  8. 《Mysql 入门很简单》(读后感①)

    下载完整版<Mysql 入门很简单>,点击这里~: http://files.cnblogs.com/files/zhengyeye/MySQL%E5%85%A5%E9%97%A8%E5% ...

  9. Hibernate入门2.简单的项目开发实例

    Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...

随机推荐

  1. blender, merge顶点

    选择Edit Mode:,和vertex select: 同时选中两个要merge的顶点(同时选中多个顶点:http://www.cnblogs.com/wantnon/p/4526573.html) ...

  2. 小米手机解锁bootload教程及常见问题

    小米手机解锁bl需要在官网提交申请,然后电脑解锁,具体步骤如下: 1.首先需要注册一个小米账号,并登陆. 2.到官网解锁网页提交申请:http://www.miui.com/unlock/index. ...

  3. 深入理解Spark 2.1 Core (十一):Shuffle Reduce 端的原理与源代码分析

    http://blog.csdn.net/u011239443/article/details/56843264 在<深入理解Spark 2.1 Core (九):迭代计算和Shuffle的原理 ...

  4. 02、获取 WebView 控件中,加载的 HTML 网页内容

    在开发 app 的时候,WebView 是经常使用的控件.而且有时需要向 WebView 中的 html 内容 注入额外的 js 进行操作.这里记录一下在当前 WebView 控件中,获取 html ...

  5. JAVA-Word转PDF各种版本实现方式

    当下做一个项目,就是各种操作office,客户的需求总是各种不按常理,来需求就得搞啊.对JAVA操作office这方面真是头大,弟弟是真滴不懂不会啊.无奈只好试啊试的.网上一大堆好使的,一大堆不好使的 ...

  6. jquery 情况form表单的所有内容

    #project_file_upload 为表单的id $(':input','#project_file_upload') .not(':button, :submit, :reset, :hidd ...

  7. Ecshop安装的坑,建议不要使用!

    最近因为工作的需要,安装了下ecshop,这个曾经的火爆开源程序,现在也呈现出疲态. 1.请看官方的运行环境推荐: 服务器端运行环境推荐·php版本5.0以上5.3以下的版本(推荐使用5.2系列版本) ...

  8. 一款基于jQuery的联动Select下拉框

    今天我们要来分享一款很实用的jQuery插件,它是一个基于jQuery多级联动的省市地区Select下拉框,并且值得一提的是,这款联动下拉框是经过自定义美化过的,外观比浏览器自带的要漂亮许多.另外,这 ...

  9. per-cpu

    What is percpu data? percpu data 是内核为smp系统中不同CPU之间的数据保护方式,系统为每个CPU维护一段私有的空间,在这段空间中的数据只有这个CPU能访问.但是这种 ...

  10. 使用Navicat连接阿里云服务器上的MySQL数据库=======Linux 开放 /etc/hosts.allow

    使用Navicat连接阿里云服务器上的MySQL数据库   1.首先打开Navicat,文件>新建连接> 2,两张连接方法 1>常规中输入数据库的主机名,端口,用户名,密码 这种直接 ...