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. $trainClassLayer.find('input[name=data-item-checkbox]').eq(index).change();//激活第index+1那个checkbox

    ☆ $.each(data, function (index, org) { if (org.alreadySent) { $trainClassLayer.find('input[name=data ...

  2. shell 修改工作路径

    import os os.getcwd() #查看现路径 os.chdir('新路径') #修改路径

  3. 关闭MongoDB服务的几种方法

    MongoDB 提供几种关闭服务的命令,具体为以下: 一 使用 Crtl+C 关闭 [mongo@redhatB data]$ mongod --dbpath=/database/mongodb/da ...

  4. xencenter创建快照和恢复快照

    创建快照 恢复快照

  5. 代码分层之模拟servlet调用dao

    一:代码分层 com.guangming.dao 存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据com.guangming.servlet 存放servlet相 ...

  6. sqler sql 转rest api 的docker 镜像构建(续)使用源码编译

    sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git cl ...

  7. prime 又一个开源的基于graphql 的cms

    prime 是一个开源的基于graphql 的cms,类似的已经又好多了,strapi 就是一个(graphql 是通过插件扩展的) graphcms 是一款不错的,但是是收费的,prime 是基于t ...

  8. C libraries in Linux

    Copy from a book. There are several C libraries to choose from. The main options are as follows: gli ...

  9. Bubble Sort冒泡排序

    冒泡排序是一种简单的排序算法. 它每次重复的访问过要排序的数列, 一次比较两个元素, 如果他们的顺错误, 就把他们交换过来. 下面这种图很清晰的解释了什么是冒泡算法. 具体算法描述如下: 1. 比较相 ...

  10. 网易的Airtest

    使用心得:https://testerhome.com/topics/12391 下载路径:https://airtest.netease.com/