Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)


1 效果

2 BaseHolder的封装

public class BaseViewHolder  extends RecyclerView.ViewHolder {private SparseArray<View> views;public BaseViewHolder(View view) {super(view);this.views = new SparseArray<>();}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 View getRootView() {return itemView;}}
3 BaseRecyclerViewAdapter 的封装
public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {private Context context;private LayoutInflater inflater;private List<T> datas;private int layoutId;protected OnItemClickListner onItemClickListner;//单击事件protected OnItemLongClickListner onItemLongClickListner;//长按单击事件private boolean clickFlag = true;//单击事件和长单击事件的屏蔽标识/*** @param context  上下文对象* @param datas    数据* @param layoutId 布局ID*/public BaseRecyclerViewAdapter(Context context, List<T> datas, int layoutId) {this.context = context;this.datas = datas;this.layoutId = layoutId;this.inflater = LayoutInflater.from(context);}@Overridepublic BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//创建ViewHolderreturn new BaseViewHolder(inflater.inflate(layoutId, parent, false));}@Overridepublic void onBindViewHolder(BaseViewHolder holder, int position) {//数据绑定bindData(holder, datas.get(position), position);}@Overridepublic int getItemCount() {return datas == null ? 0 : datas.size();}protected abstract void bindData(BaseViewHolder holder, T data, int position);//设置Item点击事件public void setOnItemClickListner(OnItemClickListner onItemClickListner) {this.onItemClickListner = onItemClickListner;}//设置Item长按点击事件public void setOnItemLongClickListner(OnItemLongClickListner onItemLongClickListner) {this.onItemLongClickListner = onItemLongClickListner;}public interface OnItemClickListner {void onItemClickListner(View v, int position);}public interface OnItemLongClickListner {void onItemLongClickListner(View v, int position);}}
4 使用
4.1 创建 CustomViewHolder
private class CustomViewHolder extends BaseRecyclerViewAdapter<String>{/*** @param context  上下文对象* @param datas    数据* @param layoutId 布局ID*/public CustomViewHolder(Context context, List<String> datas, int layoutId) {super(context, datas, layoutId);}@Overrideprotected void bindData(BaseViewHolder holder, String data, int position) {TextView textView =  holder.getRootView().findViewById(R.id.tv_item_text);textView.setText("测试数据 "+position);}
}
4.2 对RecyclerView 设置 CustomViewHolder
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_main_content);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {list.add("智慧安卓 -- "+i);
}//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getApplicationContext());
//设置
contentRecyclerView.setLayoutManager(linearLayoutManager);
//设置水平排列
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
CustomViewHolder customViewHolder = new CustomViewHolder(this.getApplicationContext(), list, R.layout.item);contentRecyclerView.setAdapter(customViewHolder);

Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)相关推荐

  1. RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性)

    Android RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性) 效果 1 聊天窗口子视图布局文件 1.1 左边消息视图布局文件 使用到的背景图片 <?xml v ...

  2. RecyclerView(一)综合使用综述(Android 5.0 新特性)

    Android RecyclerView(一)综合使用综述(Android 5.0 新特性) RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强 ...

  3. RecyclerView(四)设置分割线样式(Android 5.0 新特性)

    Android RecyclerView(四)设置分割线样式(Android 5.0 新特性) 样式一 在这里,其实是设置了每一个 条目布局中的子布局的android:layout_margin = ...

  4. Android 8.0新特性(看这篇文章就够了)

    2019独角兽企业重金招聘Python工程师标准>>> 在刚结束不久的谷歌 I/O2017开发者大会上发布的第二个Android O(安卓8.0)开发者预览,并且向普通用户开放了第二 ...

  5. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  6. Android 4.0新特性(中文)

    Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...

  7. 安卓9.0发布,献上Android 9.0新特性适配处理

    安卓9.0即Android 9.0已经面向全球发布,它的代号是Pie,仍然基于Linux内核构建.为了避免Android 9.0 Pie新特性更新引发的适配问题,本文将介绍Android 9.0将带来 ...

  8. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

  9. android 百度定位 封装,百度定位SDK使用V4.0

    前言:最近在做一个应用,要用到LBS定位,本想自己写,可技术还是不到位,而且时间也不多了,还是以先实现为主吧,然后就研究百度的LBS定位,谷歌的也有LBS定位服务,但总感觉谷歌大神被赶到香港以后,就一 ...

最新文章

  1. 利用frp进行内网穿透
  2. 大数据处理过程中,如何让Hadoop运行得更快一些?
  3. 区域经济、地理信息、互联网三者交叉之行业背景分析
  4. php 判断字符串是不存在json中
  5. MFC中动态创建控件以及事件响应实现方法
  6. 社区奖品之原木双面记事板
  7. HDOJ5542-The Battle of Chibi【树状数组,dp】
  8. 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-汇总
  9. Linux-实用快捷键操作
  10. Selenium TestNG Java环境搭建过程中所遇问题汇总
  11. 古代皇帝的某祖某宗,有什么讲究
  12. 什么叫预判_挖机事故发生之前,挖机司机做了什么?
  13. 元器件选型实例(如何选一款合适的 DC-DC )
  14. ANSYS入门例程笔记
  15. 计算机主机显示接口,一文了解电脑视频接口 看完彻底明白了
  16. 教你做Android逆向
  17. 前端研发生态环境构建经验谈
  18. 彬彬说,真正的喜欢一个人就会用心的去揣摩她,去知道她喜欢什么,什么性格...
  19. 2016全球大数据战略版图剖析(4):分析篇下
  20. 0320-复利计算器代码

热门文章

  1. ResNet及其变种的结构梳理、有效性分析与代码解读(PyTorch)
  2. 反射 数据类型_C#扫盲篇(一):反射机制情真意切的说
  3. java中decrement,Java Math decrementExact()用法及代码示例
  4. 顶尖!百度AI算法专家手把手带你论文复现打比赛!
  5. 一文带你纵览 200+ 大规模机器学习研究
  6. 【绝对干货】TEASER前传之QUASAR:基于四元数的存在外点Wahba问题的可证明最优解
  7. 国土空间规划中工作底图如何制作
  8. 照片尺寸大小对照表_贴片led灯珠型号对照表在手,贴片灯珠选型从此不愁!
  9. git tag和分支的区别_GIT常用命令大全
  10. 客户组网服务案列_山西seo关键词排名优化案列