RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。
    顾名思义,RecyclerView 会回收这些单个的元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。这种重用可以显著提高性能,改善应用响应能力并降低功耗。
    查找了网上众多写法,有很多不是失效了就是不够简洁,个人觉得还是文档中的写法最简洁好用,简单使用请查看Google官方指南。因官网的只是单列介绍,使用次数多了觉得每次都要写一个适配器觉得很麻烦,于是搜索了一下通用适配器,于是找到了这篇文章,仔细看了一番,发现传入的参数太多,写的很麻烦,于是就参照这个文章和官方文档进行了缩减。

定义通用的ViewHolder和Adapter

import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public abstract class CurrentAdapter<T> extends RecyclerView.Adapter<CurrentAdapter.ViewHolder> {private List<T> localDataSet;
/*布局文件id*/private int layoutId;public static class ViewHolder extends RecyclerView.ViewHolder {private View itemView;/*控件个数未知*/private SparseArray<View> views;public ViewHolder(@NonNull View itemView) {super(itemView);this.itemView=itemView;views =new SparseArray<View>();}/*通过view的id添加到views中,get()查找,如果存在返回该view,不存在则添加并返回*/public <T extends View> T getView(int viewId){View view= views.get(viewId);if(view==null){view=itemView.findViewById(viewId);views.put(viewId,view);}return (T)view;};/*  这个方法让我觉得有点麻烦,难道以后新加的控件都需要写一个相似的方法?public ViewHolder setText(int viewId,String text){TextView textView=getView(viewId);textView.setText(text);return this;}*/}
/*有参构造传入参数*/public CurrentAdapter(List<T> localDataSet, int layoutId) {this.localDataSet = localDataSet;this.layoutId = layoutId;}// Create new views (invoked by the layout manager)@Overridepublic ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {View view = LayoutInflater.from(viewGroup.getContext()).inflate(layoutId, viewGroup, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(ViewHolder viewHolder, final int position) {convert(viewHolder,localDataSet.get(position));}/*定义外部接口,实现对view添加和设置*/public abstract void convert(ViewHolder holder,T t);@Overridepublic int getItemCount() {return localDataSet.size();}
}

使用方法

/*live是一个List<String>  live=new ArrayList<>();
数据自己添加*/
RecyclerView live_recyclerView=view.findViewById(R.id.recycler);
/*R.layout.fragment_liveitem是我的布局文件名,里面只有一个TextView控件,id是R.id.item*/
CurrentAdapter<String> currentAdapter=new CurrentAdapter<String>(live,R.layout.fragment_liveitem) {@Overridepublic void convert(ViewHolder holder, String s) {/*我不想在内部添加太多方法,所以直接在这里进行设置*/TextView textView =holder.getView(R.id.item);textView.setText(s);/*添加有方法的用法holder.setText(R.id.item,s);*/}
};live_recyclerView.setAdapter(currentAdapter);
/*下面的布局管理器根据需要进行设置即可。*/
/* //LinearLayoutManager
live_recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
*/
/*
//GridLayoutManager
live_recyclerView.setLayoutManager(new GridLayoutManager(this,3));
*/
/*
//StaggeredLayouManager
live_recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
*/
   关于RecyclerView的点击事件,因为我采用的是addOnItemTouchListener的方式,所以以上代码中不含点击事件的处理。

RecyclerView通用适配器相关推荐

  1. Android适配器以及作用,Android RecyclerView 通用适配器的实现

    分析 我们需要在RecyclerViewAdapter内部维持一个数据集合的引用 需要实现Item的点击事件,包括短按和长按,并需要向外部提供设置监听器的方法 这个适配器必须通用,所以应该是泛型的,并 ...

  2. Android RecyclerView简单通用适配器

    一直都想写一个通用的RecyclerView适配器,但是一直都无从下手,后来看了鸿洋大神的博客后才知道怎么写,并且在此基础上添加了点自己的东西,终于算是大功告成.先上代码看看 public class ...

  3. 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听

    ListView在Android开发中是比较常用的系统组件,但是有时候我们除了需要做ListView上每一行的点击监听事件之外,如果每一行上还有其他需要监听的控件例如Button.CheckBox等, ...

  4. RecyclerView复杂适配器的终极形态?代码更解耦

    本文已授权微信公众号:鸿洋  在微信公众号平台原创首发.RecyclerView复杂适配器的"终极形态"?代码更解耦 前言 RecyclerView是Android开发中很常用的控 ...

  5. android怎么设置适配器,Android之自定义实现BaseAdapter(通用适配器三)

    在上一篇中,我们说过,在setData中如果有很多控件的话,我们还是要在该方法中写入很多代码,为了降低开发的方便性,本次就在此基础上再一次优化.实现原理是这样的,每次在setData中都要查找控件,然 ...

  6. listview-android:打造万能通用适配器(转)

    转载:https://blog.csdn.net/q649381130/article/details/51781921: 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  7. android中适配器,android:打造万能通用适配器

    本文原创,转载请注明出处. 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广大安卓开发者需要掌握和优化的技巧. 本文旨在介绍一个通用的适配器BaseCommAdapter写 ...

  8. Android:打造万能通用适配器

    原文地址:http://blog.csdn.net/q649381130/article/details/51781921 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  9. RecyclerView 万能适配器

    一.框架引入 先在项目的 build.gradle(Project:XXXX) 的 repositories 添加: allprojects {repositories {...maven { url ...

  10. kotlin中RecyclerView.Adapter通用适配器

    文章目录 结合databinding,livedata BaseViewHolder BaseAdapter recycleView通用adapter 使用 数据bean ViewModel 绑定it ...

最新文章

  1. linux apache配置目录大小写,linux apache 配置URL地址栏大小写不敏感配置
  2. Onenote 2010 多PC端笔记同步
  3. html中用来标记关键字的标识,简单的HTML标识属性与识别
  4. c++ 优先队列_什么是队列?(Python队列)
  5. 云原生生态周报 Vol. 19 | Helm 推荐用户转向 V3
  6. 全球及中国焦炉气制天然气用催化剂行业前景动态与未来可行性研究报告2022版
  7. 我与计算机编程的不解之缘(2015.9~2022.1)
  8. thinking-in-java(11) 持有对象
  9. windows性能监视器基本指标
  10. 最新版ins安装包下载
  11. 网易云解锁灰色音乐PC、移动端都可用。
  12. html 字体立体效果,如何利用CSS3制作3D效果文字具体实现样式
  13. Presto error executing query
  14. 【大数据】Linkis是什么呢
  15. Blend 设置通明窗体
  16. docker使用-p参数映射端口失败
  17. SAP-PP 主生产计划MPS
  18. Cloud一分钟 |小米瞄上电纸书市场;员工《卫报》开专栏控诉亚马逊;拼多多Q3财报:总收入33.724亿元...
  19. js阻止事件的默认行为发生的三种方式
  20. Linux如何连接到WIFI网络

热门文章

  1. BadImageFormatException-试图加载格式不正确的程序(0x8007000B)
  2. System.BadImageFormatException:试图加载格式不正确的程序。(异常来自 HRESULT:0x8007000B)
  3. UT000010 Session is Invalid
  4. ntfs磁盘格式是什么?NTFS如何读写Mac硬盘?
  5. ubuntu下配置apache2+php+mysql By Assassin
  6. C语言简单实现14个例题(谭浩强第四版)
  7. 全国精确到市的新冠疫情历史数据
  8. [实战]制作简单的公众号二维码关注图
  9. 利用google地图获取位置经纬度坐标
  10. jquery 属性操作(addClass,removeClass,toggleClass)案例与tab栏切换