1. import java.util.LinkedList;
  2. import java.util.List;
  3.  
  4. import android.content.Context;
  5. import android.support.v7.widget.RecyclerView;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9.  
  10. public abstract class BaseRecyclerAdapter<T> extends
  11. RecyclerView.Adapter<BaseRecyclerViewHolder> {
  12. protected Context mContext;
  13. protected LayoutInflater mInflater;
  14. protected List<T> mDatas = new LinkedList<T>();
  15. public OnItemClickListener<T> mOnItemClickListener;
  16.  
  17. public BaseRecyclerAdapter(Context context, List<T> datas) {
  18. mContext = context;
  19. mInflater = LayoutInflater.from(context);
  20. if (datas != null) {
  21. mDatas = datas;
  22. }
  23. }
  24.  
  25. @Override
  26. public int getItemViewType(int position) {
  27. return super.getItemViewType(position);
  28. }
  29.  
  30. @Override
  31. public int getItemCount() {
  32. int count = 0;
  33. if (mDatas.size() > 0) {
  34. count = mDatas.size();
  35. }
  36. return count;
  37. }
  38.  
  39. public void addItemLast(List<T> datas) {
  40. mDatas.addAll(datas);
  41. }
  42.  
  43. public void addItemTop(List<T> datas) {
  44. mDatas = datas;
  45. }
  46.  
  47. public void remove(int position) {
  48. mDatas.remove(position);
  49. }
  50.  
  51. public void removeAll() {
  52. mDatas.clear();
  53. }
  54.  
  55. @Override
  56. public long getItemId(int position) {
  57. return position;
  58. }
  59.  
  60. public List<T> getDatas() {
  61. return mDatas;
  62. }
  63.  
  64. // 点击事件接口
  65. public interface OnItemClickListener<T> {
  66. void onItemClick(View view, int position, T model);
  67.  
  68. void onItemLongClick(View view, int position, T model);
  69. }
  70.  
  71. public void setOnItemClickListener(OnItemClickListener<T> listener) {
  72. this.mOnItemClickListener = listener;
  73. }
  74.  
  75. @Override
  76. public void onBindViewHolder(BaseRecyclerViewHolder holder, int position) {
  77. showViewHolder(holder,position);
  78. }
  79.  
  80. @Override
  81. public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  82. return createViewHOldeHolder(parent, viewType);
  83. }
  84.  
  85. protected abstract void showViewHolder(BaseRecyclerViewHolder holder, int position);
  86.  
  87. /***
  88. *
  89. * @param parent
  90. * @param viewType
  91. * @return
  92. */
  93. protected abstract BaseRecyclerViewHolder createViewHOldeHolder(ViewGroup parent,
  94. int viewType);
  95.  
  96. }
  1. import android.support.v7.widget.RecyclerView.ViewHolder;
  2. import android.view.View;
  3.  
  4. public abstract class BaseRecyclerViewHolder extends ViewHolder {
  5.  
  6. public BaseRecyclerViewHolder(View view) {
  7. super(view);
  8. }
  9.  
  10. }

使用方法

  1. /***
  2. * 用户列表adapter
  3. *
  4. */
  5. public class UserListAdapter extends BaseRecyclerAdapter<UserDetails> {
  6.  
  7. public UserListAdapter(Context context, List<UserDetails> datas) {
  8. super(context, datas);
  9. }
  10.  
  11. @Override
  12. protected void showViewHolder(BaseRecyclerViewHolder holder, final int position) {
  13. final ViewHolder viewHolder=(ViewHolder)holder;
  14. final UserDetails model=mDatas.get(position);
  15. if (TextUtils.isEmpty(model.getIcon())) {
  16. FangDaImageLoader.getInstance().setImage("drawable://" + R.drawable.face_default, viewHolder.img_icon);
  17. } else {
  18. FangDaImageLoader.getInstance().setImage(model.getIcon(), viewHolder.img_icon);
  19. }
  20. viewHolder.txt_message.setText(model.getIntro());
  21. viewHolder.txt_username.setText(model.getUserName());
  22. viewHolder.btn_user_state.setSelected(true);
  23. viewHolder.btn_user_state.setText(mContext.getString(R.string.btn_add_text));
  24. viewHolder.btn_user_state.setVisibility(View.GONE);
  25. if (mOnItemClickListener != null) {
  26. holder.itemView.setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. mOnItemClickListener.onItemClick(viewHolder.itemView, position,model);
  30. }
  31. });
  32.  
  33. // 长点击事件
  34. holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
  35. @Override
  36. public boolean onLongClick(View v) {
  37. mOnItemClickListener.onItemLongClick(viewHolder.itemView, position,model);
  38. return true;
  39. }
  40. });
  41.  
  42. }
  43. }
  44.  
  45. @Override
  46. protected BaseRecyclerViewHolder createViewHOldeHolder(ViewGroup parent,
  47. int viewType) {
  48. View mView = null;
  49. BaseRecyclerViewHolder mViewHolder = null;
  50. mView = mInflater.inflate(R.layout.row_invite_msg, parent, false);
  51. mViewHolder = new ViewHolder(mView);
  52. return mViewHolder;
  53. }
  54.  
  55. static class ViewHolder extends BaseRecyclerViewHolder {
  56. @Bind(R.id.img_icon)
  57. RoundImageView img_icon;
  58. @Bind(R.id.txt_message)
  59. CustomTextView txt_username;
  60. @Bind(R.id.txt_username)
  61. CustomTextView txt_message;
  62. @Bind(R.id.btn_user_state)
  63. CustomButton btn_user_state;
  64.  
  65. ViewHolder(View view) {
  66. super(view);
  67. ButterKnife.bind(this, view);
  68. }
  69. }
  70.  
  71. }
  1. adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener<UserDetails>() {
  2.  
  3. @Override
  4. public void onItemClick(View view, int position, UserDetails model) {
  5. intent=new Intent(context, PersonalSpaceActivity.class);
  6. intent.putExtra("uid",model.getUid());
  7. intent.putExtra("username", model.getUserName());
  8. startActivity(intent);
  9. }
  10.  
  11. @Override
  12. public void onItemLongClick(View view, int position,
  13. UserDetails model) {
  14.  
  15. }
  16. });

RecyclerAdapter封装的更多相关文章

  1. RecyclerView的通用适配器,和滚动时不加载图片的封装

    对于RecyclerView我们需要使用RecyclerAdapter,使用方式与ListViewAdapter类似,具体代码大家可以在网上搜索,这里就只教大家使用封装后的简洁RecyclerAdap ...

  2. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. iOS开发之App间账号共享与SDK封装

    上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...

  4. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

  5. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  6. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  7. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  8. 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  9. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

随机推荐

  1. hello1分析

    1:选择hello1文件夹并单击“打开项目”.展开“Web页”节点,然后双击该index.xhtml文件以在编辑器中查看它. 该index.xhtml文件是Facelets应用程序的默认登录页面.在典 ...

  2. day3 反射与动态代理

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  3. 安装windows系统时遇到的大坑——鼠标键盘没反应

    进入安装系统界面时,鼠标键盘没反应,换到其他usb接口也不行 解决方法如下,需要进入bios设置两个地方,设置如下 安装好系统(win7)之后,还遇到了两个问题,一个是驱动没安装,插U盘也没反应,一个 ...

  4. hive GenericUDF1

    和UDF相比,通用GDF(GenericUDF)支持复杂类型(比如List,struct等)的输入和输出. 下面来看一个小示例. Hive中whereme表中包含若干人的行程如下: A       2 ...

  5. 使用prometheus+ grafana+nginx-module-vts 模块监控openresty

      nginx-module-vts 是一个很不错的nginx 模块,我们可以用来,方便的分析系统的请求状态 同时支持基于prometheus 的监控, 我参考openresty 的docker镜像已 ...

  6. Android开发之GridView的使用(解读谷歌官方API)

          GridView将图片显示在二维可移动的网格里.使用ListAdapter能够将Grid项目自己主动填充满整个布局. 以下我们依据官方文档的样例来实现一下使用GridView,点击视图里的 ...

  7. oracle-srvctl-output

    ############################## [grid@rac01 ~]$ crsctl query crs administratorCRS Administrator List: ...

  8. JavaScript 中 this的指向

    this 一方面便利了让大家在JS开发当, 但是另一方面让开发者头痛的是不清楚this 指代什么. 指向全局Window: <script> console.log(this); < ...

  9. What happens to our code? JavaScript 代码是怎样执行的

    1. 我们的代码第一步会被parser 语法分析程序分析. 如果没有报错之后 2. 生产SyntaxTree, 我们的代码会转换成machine code 3. 最终 我们的代码会被运行出来. 下面的 ...

  10. shiro学习笔记

    一.概念: shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证.权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. (一)shiro的功能 ...