RecyclerView 是从Android5.0开始加入进来用来代替ListView的一种列表式控件,它的在功能上比listview更为强大,支持竖滑流,横滑流,瀑布流等几种风格,并且区别于listview的Adapter,有自己单独的适配器,支持ViewHolder的使用,在这方面的优化也不是listView能够比拟的,也难怪能在短暂的时间内迅速代替listView成为开发者手中的香馍馍。

这里我记录下我重写ViewHolder和Adapter和使用RecyclerView的流程,方便以后的工作中做参考:

  1. 重写RecyclerView的ViewHolder类,为以后打基础
public class CommRecyclerViewHolder extends RecyclerView.ViewHolder {private SparseArray<View> mViews;private Context mContext;private View mConvertView;public CommRecyclerViewHolder(Context context, View itemView) {super(itemView);mContext = context;mConvertView = itemView;mViews = new SparseArray<View>();}public CommRecyclerViewHolder(Context context, View itemView, ViewGroup parent) {super(itemView);mContext = context;mConvertView = itemView;mViews = new SparseArray<>();}public static CommRecyclerViewHolder get(Context context, View itemView) {CommRecyclerViewHolder holder = new CommRecyclerViewHolder(context, itemView);return holder;}public static CommRecyclerViewHolder get(Context context, ViewGroup parent, int layoutId) {View itemView = LayoutInflater.from(context).inflate(layoutId, parent, false);CommRecyclerViewHolder viewHolder = new CommRecyclerViewHolder(context, itemView, parent);return viewHolder;}public View getmConvertView() {return mConvertView;}public Context getContext() {return mContext;}public <T extends View> T getView(int viewId) {View view = mViews.get(viewId);if (view == null) {view = mConvertView.findViewById(viewId);mViews.put(viewId, view);}return (T) view;}public CommRecyclerViewHolder setText(int viewId, String text) {TextView tv = getView(viewId);tv.setText(text);return this;}public CommRecyclerViewHolder setText(int viewId, Spanned text) {TextView tv = getView(viewId);tv.setText(text);return this;}public CommRecyclerViewHolder setImageResource(int viewId, int resId) {ImageView view = getView(viewId);view.setImageResource(resId);return this;}public CommRecyclerViewHolder setOnClickListener(int viewId,View.OnClickListener listener) {View view = getView(viewId);view.setOnClickListener(listener);return this;}public CommRecyclerViewHolder setOnLongClickListener(int viewId,View.OnLongClickListener listener) {View view = getView(viewId);view.setOnLongClickListener(listener);return this;}public void setVisible(int viewId, boolean visible) {View view = getView(viewId);view.setVisibility(visible ? View.VISIBLE : View.GONE);}public TextView getTextView(int viewId){return getView(viewId);}public ImageView getImageView(int viewId){return getView(viewId);}public RelativeLayout getReltiveLayout(int viewId){return getView(viewId);}
}

2.重写RecyclerVIew的Adapter类,为后期打基础

public abstract class CommRecyclerViewAdapter<T> extends RecyclerView.Adapter<CommRecyclerViewHolder> {protected LayoutInflater mInflater;protected Context mContext;protected List<T> mDatas = null;protected final int mItemLayoutId;public CommRecyclerViewAdapter(Context context, List<T> data, int itemLayoutId) {mContext = context;mDatas = data != null ? data : new ArrayList<>();mItemLayoutId = itemLayoutId;mInflater = LayoutInflater.from(context);}@Overridepublic CommRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {CommRecyclerViewHolder viewHolder = CommRecyclerViewHolder.get(mContext, parent, mItemLayoutId);return viewHolder;}@Overridepublic void onBindViewHolder(CommRecyclerViewHolder holder, int position) {try {convert(holder, mDatas.get(position));} catch (IndexOutOfBoundsException e) {e.printStackTrace();convert(holder, null);}}@Overridepublic int getItemCount() {return mDatas.size();}public abstract void convert(CommRecyclerViewHolder holder, T t);}

3.写好基类后创建自定义的Adapter继承基类Adapter,这块各有各的不同就不写出来了。

4.在Activity中初始化RecyclerView,画分割线,这里和ListView有点不同,RecyclerView有单独的画分割线的方法,不用在列表每一项下面划线。

        DividerItemDecoration decoration = new DividerItemDecoration();decoration.setDividerLookup(new DividerItemDecoration.DividerLookup() {@Overridepublic Divider getVerticalDivider(int position) {return null;}@Overridepublic Divider getHorizontalDivider(int position) {return new Divider.Builder().size(dp2px(0.5f)).margleft(dp2px(20)).color(getResources().getColor(R.color.witer)).build();}});LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);recyclerView.setLayoutManager(linearLayoutManager);recyclerView.addItemDecoration(decoration);

其中new Divider.Builder().size()方法是分割线的粗细,dp2px()方法是转化下单位这里面使用的类是用的Android 28里面的,margleft()方法是离左边的距离,有左自然有右没写,color()方法是分割线的颜色

 public static int dp2px( float dpVal) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getContext().getResources().getDisplayMetrics());}

5.最后用setAdapter方法将RecyclerVIew和Adapter连接起来

 recyclerView.setAdapter(adapter);

以上就是我对RecyclerView的封装和使用,是不是很简单,记录下。

记录下Android RecyclerView的使用相关推荐

  1. Android RecyclerView(八)设置自定义 下拉刷新 与 上拉加载数据

    Android RecyclerView(八)设置下拉刷新 与 上拉加载数据 GitHub 项目源码 CSDN 博客说明 智慧安卓App 文章分析 下拉刷新效果 上拉加载数据效果 1 xml布局文件中 ...

  2. android 下拉刷新实现方式,Android RecyclerView设置下拉刷新的实现方法

    Android RecyclerView设置下拉刷新的实现方法 1 集成 SwipeRefreshLayout 1.1 xml布局文件中使用 android:id="@+id/refresh ...

  3. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题. 参考文章: (1)记录下帮助一位网友解决的关于android子控件的onTouch或o ...

  4. android 设置下拉刷新,Android RecyclerView设置下拉刷新的实现方法

    Android RecyclerView设置下拉刷新的实现方法 1 集成 SwipeRefreshLayout 1.1 xml布局文件中使用 android:id="@+id/refresh ...

  5. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(一)

    第二篇文章链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(二) 效果图: 前言 之前看到这种效果如果用recyclerview来实现没有一点思路, ...

  6. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(二)

    第一篇链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(一) 注!已更新代码! 上一篇写了分组效果的初步实现: 这一篇就继续增加分组折叠效果和基类的 ...

  7. Android RecyclerView +SnapHelper 实现横向滚动自动滚动到中心控件并选中

    效果图 此效果已被产品砍掉,所以有些适配bug就不修改了 此博客只为记录下代码 默哀3秒 1秒 2秒 3秒 代码 布局文件 <?xml version="1.0" encod ...

  8. Android RecyclerView 基本使用

    Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用 ...

  9. Mac下Android studio 之NDK配置教程(一)

    Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...

最新文章

  1. 单tomcat多实例的实现
  2. 转: Source Code Lookup in Eclipse(主要讲的是java的)
  3. TCP/IP协议 网络层
  4. python字符串前面加f什么意思_Python 字符串前面加u,r,b,f的含义
  5. Java笔记-keytool生成SSL双向证书
  6. 通过char与varchar的区别,学习可变长的字符类型
  7. 20165221 JAVA第四周学习心得
  8. plt.plot绘图
  9. String 类 的 使用
  10. Linux命令之find命令
  11. java项目-第91期基于ssm的蛋糕商城系统
  12. ps cs6调油画效果教程
  13. android模拟器命令大全,玩转安卓模拟器命令行
  14. TI C66x DSP 系统events及其应用 - 1
  15. 实现挂视频的三种方法
  16. Sequence Model-week1编程题3-用LSTM网络生成爵士乐
  17. 【vue系列-05】vue的生命周期(详解)
  18. WIFI简介 以及SDIO总线介绍
  19. 企业入驻腾讯公益平台步骤
  20. python爬取虎扑论坛帖子数据

热门文章

  1. 某些material英文翻译
  2. unityShader之遮挡透明效果
  3. xczu3eg板子安装Ubuntu文件系统
  4. vue中打印表格,打印不全的问题
  5. 我用段子讲.NET之依赖注入其二
  6. Java游戏-贪吃蛇
  7. 港中文提出SMCA:加快DETR收敛
  8. 怎样在运行jar包时指定jdk
  9. linux图形界面历史,桌面应用|用 ROX 桌面重温 Linux 历史
  10. php反编译opcode,从HGAME的pyc逆向来看手撸opcode