虽然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. Object-C中的数字对象

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  2. 【DataStructure】Some useful methods about linkedList.

    /** * Method 1: Delete the input element x  * and meanwhile keep the length of array after deleted n ...

  3. 查看Linux是32位还是64位的方法

    发布:JB01   来源:脚本学堂     [大 中 小] 本文介绍下,快速查看linux系统是32位还是64位的方法,有需要的朋友参考下吧. 本节内容:查看linux操作系统的位数 一,方法A:un ...

  4. spring 发布 Jax-Ws Service (一)

    1.maven依赖: <dependency> <groupId>org.springframework.ws</groupId> <artifactId&g ...

  5. C# fixed详解

    相信很多人在这样或那样的项目中,或者无意间看到了fixed语句块,看到之后你肯定会疑问: 1.这个fixed关键字是做什么用的? 2.什么情况下需要该关键字? 3.这个关键字该怎么用? 我相信解决了上 ...

  6. quick-cocos2dx-2.2.4环境搭建

    1.Quick-Coco2d-x介绍 Quick-Coco2d-x是Cocos2d-x在Lua上的增强和扩展版本,廖宇雷廖大觉得官方Cocos2d-x的Lua版本不是太好用,于是便在官方Lua版本的基 ...

  7. 2、visual studio 常用设置

    1.关闭 “引用” 提示 有时候感觉 “方法” 或者 “类” 上的引用有点乱: 去掉它的步骤: 1)在 “引用”文字上单击鼠标右键: 2)在弹出的“选项” 对话框中,取消 CodeLens: 2.打开 ...

  8. 基于zookeeper、连接池、Failover/LoadBalance等改造Thrift 服务化

    对于Thrift服务化的改造,主要是客户端,可以从如下几个方面进行: 1.服务端的服务注册,客户端自动发现,无需手工修改配置,这里我们使用zookeeper,但由于zookeeper本身提供的客户端使 ...

  9. selenium:chromedriver与chrome版本的对应关系

    转自:http://blog.csdn.NET/huilan_same/article/details/51896672 再使用selenium打开chrome浏览器的时候,需要用chromedriv ...

  10. latex之图表位置控制

    \begin{table}[!htbp] !-忽略“美学”标准 h-here t-top b-bottom p-page-of-its-own