关于RecyclerView大家都不陌生了,它的使用也越来越受欢迎,现在总体了解一下RecyclerView的作用,为什么会有RecyclerView呢,我用ListView也能干所有的事情啊,尺有所短,寸有所长,先来看看RecyclerView的优点吧
  1. 可以快速实现gallery 效果。
  2. 可以快速实现瀑布流效果。
  3. 可以方便地为Item添加动画效果。

好吧,看到这些对RecyclerView的强大应该有一些认识了吧,再看看使用RecyclerView会遇到哪些麻烦

1.  没有为Item提供点击事件。
2.  没有为Item提供分割线。

先来实现一个简单的RecyclerView–

在grade里引入support包

compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:+'

MainActivity

public class MainActivity extends AppCompatActivity {private RecyclerView mRecyclerView;private List<String> mListData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();mRecyclerView = (RecyclerView) findViewById(R.id.rl_list);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.setAdapter(new RecyclerAdapter(this,mListData));}private void initData() {mListData = new ArrayList<String>();for (int i = 0; i < 100; i++) {mListData.add("我是第" + i + "行");}}}

RecyclerAdapter

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.TestViewHolder> {private Context mContext;private List<String> mList;public RecyclerAdapter(Context context, List<String> list) {mContext = context;mList = list;}@Overridepublic TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {TestViewHolder holder = new TestViewHolder(LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_layout, parent, false));return holder;}@Overridepublic void onBindViewHolder(TestViewHolder holder, int position) {holder.tv.setText(mList.get(position));}@Overridepublic int getItemCount() {return mList.size();}class TestViewHolder extends RecyclerView.ViewHolder {;        TextView tv;public TestViewHolder(View view) {super(view);tv = (TextView) view.findViewById(R.id.tv_number);}}
}

activity_main.xml

<?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"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.farmlink.myrecyclerview.MainActivity"><android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/rl_list" />
</RelativeLayout>

看一下效果图

没有分割线很糟糕,不过RecycleView 给你提供了绘制分割线的方法

public class DividerItemDecoration extends RecyclerView.ItemDecoration {private static final int[] ATTRS = new int[]{android.R.attr.listDivider};public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;public static  final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;private Drawable mDivider;private int mOrientation;public DividerItemDecoration(Context context, int orientation) {final TypedArray a = context.obtainStyledAttributes(ATTRS);mDivider = a.getDrawable(0);a.recycle();setOrientation(orientation);}public void setOrientation(int orientation) {if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {throw new IllegalArgumentException("invalid orientation");}mOrientation = orientation;}@Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);if (mOrientation == VERTICAL_LIST) {drawVertical(c, parent);} else {drawHorizontal(c, parent);}}public void drawVertical(Canvas c, RecyclerView parent) {final int left = parent.getPaddingLeft();final int right = parent.getWidth() - parent.getPaddingRight();final int childCount = parent.getChildCount();for (int i = 0; i < childCount; i ++) {final View child = parent.getChildAt(i);final RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)child.getLayoutParams();final int top = child.getBottom() + layoutParams.bottomMargin;final int bottom = top + mDivider.getIntrinsicHeight();mDivider.setBounds(left, top, right, bottom);mDivider.draw(c);}}public void drawHorizontal(Canvas c, RecyclerView parent) {final int top = parent.getPaddingTop();final int bottom = parent.getHeight() - parent.getPaddingBottom();final int childCount = parent.getChildCount();for (int i = 0; i < childCount; i++) {final View child = parent.getChildAt(i);final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();final int left = child.getRight() + params.rightMargin;final int right = left + mDivider.getIntrinsicHeight();mDivider.setBounds(left, top, right, bottom);mDivider.draw(c);}}@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);if (mOrientation == VERTICAL_LIST) {outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());} else {outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);}}
}

加上这句就ok了

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));


关于RecyclerView 先了解到这里。

RecyclerView详细了解相关推荐

  1. RecyclerView详细解释

    原文链接:http://www.haotianyi.win/2016/11/recyclerview%E8%AF%A6%E7%BB%86%E8%A7%A3%E9%87%8A.html Recycler ...

  2. RecyclerView详细用法

    本文转自https://blog.csdn.net/tuike/article/details/79064750#comments,用作参考学习 RecyclerView是support:recycl ...

  3. Android:这是一份非常详细的MVP+Rxjava2.0+Retrofit2.0相结合举例RecyclerView的实战篇章

    MVP+Rxjava2.0+Retrofit2.0现在是非常火的组合 MVP相信大家已经在各大网站和各大佬的文章中已经了解很多理论的理解了 MVP其实就是M层请求数据 在P层里进行M层和V层的交互 V ...

  4. RecyclerView优秀文集

    来自:https://github.com/CymChad/CymChad.github.io RecyclerView优秀文集 收集RecyclerView优秀文章,持续更新欢迎提交pr,推荐sta ...

  5. 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写

    一.项目简介和思路 接着上周项目继续,上周主要实现了tablayout的标题栏界面和屏幕切换效果.这次咱们来实现给屏幕页面填充些网页图片数据.看看大致效果图: 可以看出界面有两部分构成,上面是轮播图, ...

  6. Android中RecyclerView点击item展开列表详细内容(超简单实现)

    请注明出处: http://blog.csdn.net/qq_23179075/article/details/79230457 Android中RecyclerView点击item展开列表详细内容( ...

  7. RecyclerView简单使用(非常详细)

    星期六,又是撸代码的一天 作为一个初级都算不上的小白,一步一个脚印的学吧,学一个记一个 今天记录的是RecyclerView RecyclerView 简述 创建布局 添加 RecyclerView和 ...

  8. Android tabLayout+recyclerView实现锚点定位

    原文链接:https://mp.weixin.qq.com/s/L3o2i3WTmg1ScXEYDS8YCg 在上一篇文章 [Android 实现锚点定位 ](https://mp.weixin.qq ...

  9. 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)...

    转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...

最新文章

  1. android 蓝牙耗电量,外媒测试手机蓝牙耗电情况:近乎毫无影响
  2. 对Linux中/etc/fstab中的说明
  3. 判断某值是否属于枚举类中的值_编写高质量可维护的代码之优化逻辑判断
  4. JAVA层HIDL服务的注册原理-Android10.0 HwBinder通信原理(八)
  5. webpack Plugins列表
  6. C++ Primer 7.33 练习编写成员函数
  7. 《VMware vCAT权威指南:成功构建云环境的核心技术和方法》一3.8 多站点考虑因素...
  8. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...
  9. SpringBoot集成Mybatis用法笔记
  10. 我月薪3W,却不用熬夜加班做报表,这个养老工具,你一定要知道
  11. [转载] python set 集合详解
  12. 基于matlab的语音信号处理
  13. lvds单8转双8芯片_LVDS 数据通道详解 单8 单6
  14. 为程序员爆肝整理的防治脱发大集锦
  15. 光电信息科学与工程学c语言吗,光电信息工程专业排名_光电信息科学与工程专业可以考什么专业的研究生...
  16. 关于ASCII码的理解
  17. 针对第2章习题6的SPJ数据库,为项目名称为“一汽”的工程项目建立一个供应情况的视图V_SPJ,视图中应包括供应商代码SNO,零件代码PNO,供应数量QTY,并针对该视图完成下列查询 (1)找出一汽
  18. 自然语言处理之神经网络基础
  19. Notification的功能与使用案例
  20. Java项目:基于java航空订票系统(计算机毕业设计)

热门文章

  1. 利用mysql提供的c语言接口操作数据库
  2. Makefile(一)
  3. 1021 个位数统计 (15 分
  4. 腾讯3轮面试都问了Android事件分发,原理+实战+视频+源码
  5. 104 权限 sudo 解压缩
  6. Django Rest Framework(一)
  7. java实现时钟方法汇总
  8. 新东方面试知识点记录
  9. 自动登录360,百度
  10. 二、Python安装扩展库