import java.util.LinkedList;
import java.util.List; import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public abstract class BaseRecyclerAdapter<T> extends
RecyclerView.Adapter<BaseRecyclerViewHolder> {
protected Context mContext;
protected LayoutInflater mInflater;
protected List<T> mDatas = new LinkedList<T>();
public OnItemClickListener<T> mOnItemClickListener; public BaseRecyclerAdapter(Context context, List<T> datas) {
mContext = context;
mInflater = LayoutInflater.from(context);
if (datas != null) {
mDatas = datas;
}
} @Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
} @Override
public int getItemCount() {
int count = 0;
if (mDatas.size() > 0) {
count = mDatas.size();
}
return count;
} public void addItemLast(List<T> datas) {
mDatas.addAll(datas);
} public void addItemTop(List<T> datas) {
mDatas = datas;
} public void remove(int position) {
mDatas.remove(position);
} public void removeAll() {
mDatas.clear();
} @Override
public long getItemId(int position) {
return position;
} public List<T> getDatas() {
return mDatas;
} // 点击事件接口
public interface OnItemClickListener<T> {
void onItemClick(View view, int position, T model); void onItemLongClick(View view, int position, T model);
} public void setOnItemClickListener(OnItemClickListener<T> listener) {
this.mOnItemClickListener = listener;
} @Override
public void onBindViewHolder(BaseRecyclerViewHolder holder, int position) {
showViewHolder(holder,position);
} @Override
public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return createViewHOldeHolder(parent, viewType);
} protected abstract void showViewHolder(BaseRecyclerViewHolder holder, int position); /***
*
* @param parent
* @param viewType
* @return
*/
protected abstract BaseRecyclerViewHolder createViewHOldeHolder(ViewGroup parent,
int viewType); }
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.View; public abstract class BaseRecyclerViewHolder extends ViewHolder { public BaseRecyclerViewHolder(View view) {
super(view);
} }

使用方法

/***
* 用户列表adapter
*
*/
public class UserListAdapter extends BaseRecyclerAdapter<UserDetails> { public UserListAdapter(Context context, List<UserDetails> datas) {
super(context, datas);
} @Override
protected void showViewHolder(BaseRecyclerViewHolder holder, final int position) {
final ViewHolder viewHolder=(ViewHolder)holder;
final UserDetails model=mDatas.get(position);
if (TextUtils.isEmpty(model.getIcon())) {
FangDaImageLoader.getInstance().setImage("drawable://" + R.drawable.face_default, viewHolder.img_icon);
} else {
FangDaImageLoader.getInstance().setImage(model.getIcon(), viewHolder.img_icon);
}
viewHolder.txt_message.setText(model.getIntro());
viewHolder.txt_username.setText(model.getUserName());
viewHolder.btn_user_state.setSelected(true);
viewHolder.btn_user_state.setText(mContext.getString(R.string.btn_add_text));
viewHolder.btn_user_state.setVisibility(View.GONE);
if (mOnItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClick(viewHolder.itemView, position,model);
}
}); // 长点击事件
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mOnItemClickListener.onItemLongClick(viewHolder.itemView, position,model);
return true;
}
}); }
} @Override
protected BaseRecyclerViewHolder createViewHOldeHolder(ViewGroup parent,
int viewType) {
View mView = null;
BaseRecyclerViewHolder mViewHolder = null;
mView = mInflater.inflate(R.layout.row_invite_msg, parent, false);
mViewHolder = new ViewHolder(mView);
return mViewHolder;
} static class ViewHolder extends BaseRecyclerViewHolder {
@Bind(R.id.img_icon)
RoundImageView img_icon;
@Bind(R.id.txt_message)
CustomTextView txt_username;
@Bind(R.id.txt_username)
CustomTextView txt_message;
@Bind(R.id.btn_user_state)
CustomButton btn_user_state; ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
} }
adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener<UserDetails>() {

            @Override
public void onItemClick(View view, int position, UserDetails model) {
intent=new Intent(context, PersonalSpaceActivity.class);
intent.putExtra("uid",model.getUid());
intent.putExtra("username", model.getUserName());
startActivity(intent);
} @Override
public void onItemLongClick(View view, int position,
UserDetails model) { }
});

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. xenserver开启虚拟机时提示找不到存储介质,强制关闭和重启都没用

    具体报错内容为: this vm needs storage that cannot be seen from that host 该错误的原因是该虚拟机使用了外部存储介质,例如,我就是因为当初规划x ...

  2. AspNet Core Api Restful +Swagger 发布IIS

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  3. MySQL联结查询和组合查询

    联结查询 1.关系表 主键:一列或一组列,能够唯一区分表中的每一行,用来表示一个特定的行 外键:为某个表中的一列,包含另一个表的主键,定义量表的关系. 2.创建联结 规定要连接的表和他们如何关联即可 ...

  4. CSS矩形盒子的四个边界

    CSS下这些矩形盒子由标准盒模型描述.这个模型描述元素内容占用空间.盒子有四个边界:外边距边界margin edge, 边框边界border edge, 内边距边界padding edge 与 内容边 ...

  5. oracle之 如何 dump logfile

    这篇文章解释了如何在联机或归档重做日志文件中获取转储. 约束和限制:1.数据库必须安装(或打开).更改系统转储日志文件与任何实例无关,因此不需要为其操作安装数据库.但是,在ALTER SYSTEM D ...

  6. webpack 4 知识点

    相应Github地址:https://github.com/cag2050/webpack4_demo css-loader 让我们能在javascript代码中导入css文件,但这还不能让css起作 ...

  7. 阿里云 qW3xT.4 挖矿病毒问题

    查了一下.是个挖矿病毒,cpu 占用巨高 .杀了又有守护进程启动.网上有些杀死这个病毒的办法,大家可以试试.但是不确定能杀死. 建议直接重装系统. 然后,说说这货怎么传播的. 他通过redis .目前 ...

  8. docker 容器的使用

    本文使用centos7 1 ,docker 安装:  yum install docker; 2 启动 docker: service docker start; 3 开机启动docker: chkc ...

  9. dojo:如何显示ListBox风格的选择框

    常见的选择框控件:Selelct.FilteringSelect和ComboBox都是下拉框风格,而不是ListBox风格. dojo还提供了一个dijit.form.MultiSelect控件可以解 ...

  10. [转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库

    使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一. 项目目标 现在,我们一起创建一个简单的组件库. 首先,我们需要创建一个 header 组件.这没什么特别的,当然接下来 ...