进击的RecyclerView之入门
来源:互联网 发布:java获取星期几 编辑:程序博客网 时间:2024/06/11 18:54
虽然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
1 0
- 进击的RecyclerView之入门
- 进击的RecyclerView之二:来点小装饰?
- 进击的RecyclerView入门三(要是能拖动就好了)
- 进击的RecyclerView——LRecyclerView
- 进击的大神之路
- 进击的Android之manifests
- 进击的Android之ListView
- Android入门之RecyclerView
- 进击的Android之异步加载
- [Spring]IoC容器之进击的注解
- kafka进击之路(一) —— 入门
- flume ng进击之路 (一)—— 入门
- RecyclerView的初级入门
- RecyclerView的入门使用
- 进击的DP----数位DP入门到理解
- Mysql之字符串函数by菜鸟的进击之路
- 进击的巨人之铠之巨人,超大型巨人
- 进击的数据结构一之线性表的顺序结构
- IP聚合-2016"百度之星" - 测试赛(热身,陈题)
- 奋斗吧,程序员——第三十五章 莫愁前路无知己,天下谁人不识君
- 获取屏幕宽高
- Ubuntu安装Apache服务器
- more effective C++的读书笔记 ——不要重载&&和||
- 进击的RecyclerView之入门
- 调试基础知识0(串口调试助手对比 丁丁 大傻 友善)
- 常用工具类
- 字节流与字符流的区别详解
- Char 转int JAVA
- 用 Python 和 OpenCV 检测图片上的条形码Detecting Barcodes in Images with Python and OpenCV
- c++第五次实验--多继承
- transpose with gpu
- C++中的三目运算符号