虽然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. html使用自我知识点总结

    1. 不要忘结束标签 <p>This is a paragraph <p>This is a paragraph 未来的HTML版本号不同意省略结束标签. 2. 没有内容的HT ...

  2. vector常见用法

    #include <boost/foreach.hpp> #include <iostream> #include <vector> #include <bo ...

  3. github提交一个空目录

    github默认不上传空目录,有的时候需要空目录来保持程序的结构. 二个小问题. 1.始终保持空目录,即时里面有文件,也全部忽略掉. 建立一个.gitignore文件放到空目录内. mkdir emp ...

  4. 【Android】15.5 例15-3—Notification的各种属性演示

    分类:C#.Android.VS2015: 创建日期:2016-02-29 一.简介 利用这个例子,可测试通知的各种属性以及这些不同属性选项呈现的效果. 另外,在这个例子中,还演示了如何读写SD中的图 ...

  5. layui单文件上传

    function imguload(cls) { var taskId = $("#model-taskId").val(); var processInstanceId = $( ...

  6. xadmin 安装详解

    1.安装必要的包 django>=1.9.0 django-crispy-forms>=1.6.0 django-import-export>=0.5.1 django-revers ...

  7. CSS学习笔记(10)--nth-child和nth-of-type

    CSS3 :nth-child() 选择器 规定属于其父元素的第二个子元素的每个 p 的背景色: p:nth-child(2) CSS3 :nth-of-type() 选择器 规定属于其父元素的第二个 ...

  8. 亿级Web系统的容错性建设实践(转)

    三年多前,我在腾讯负责的活动运营系统,因为业务流量规模的数倍增长,系统出现了各种各样的异常,那个时候,我7*24小时地没日没夜处理告警,周末和凌晨也经常上线,疲于奔命.后来,当时的老领导对我说:你不能 ...

  9. CI 如何获取get请求过来的数据

    http://localhost/ci_tuangou/index.php/home/index/index?gid=2 echo 'gid='. $this->input->get('g ...

  10. springcloud微服务架构搭建

    SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...