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. (惊艳)对象序列化和反序列--Hibernate的查询和新增极其相似

    Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去 ...

  2. Android.bp学习笔记

    1.Android.bp简介 Android 7.0之后希望用Android.bp替换Android.mk,bp简单的配置更方便Ninja 文件的产生,而Blueprint和Soong 就此产生.An ...

  3. 简单 babel plugin 开发-使用lerna 工具

    babel在现在的web 应用开发上具有很重要的作用,帮助我们做了好多事情,同时又有 比较多的babel plugin 可以解决我们实际开发上的问题. 以下只是学习下如果编写一个简单的babel pl ...

  4. kettle的系列教程

    kettle--window开发环境和linux运行环境的迁移 kettle的输入输出组件和脚本组件 kettle--变量的使用 kettle的资源库 kettle的job kettle的hello ...

  5. Quartz.NET-2.3.3 各种 数据库配置 类别大全

    <!--SqlServer <add key="quartz.dataSource.myDS.connectionString" value="Data So ...

  6. 海思HI3518由于sensor对齐方式问题导致视频花屏

    https://blog.csdn.net/faihung/article/details/70306446 前几天在验证一台IPC硬件时,遇到一个问题:在其它设备上视频功能运行正常的固件,烧录到客户 ...

  7. java对文件操作之实用

    创建文件 package com.pre; import java.io.File; public class WJ { public static void main(String[] args) ...

  8. webpack 的 入口(Entry)、输出(Output)

    入口(Entry) 入口定义了我们的应用代码开始执行的那个文件,webpack从这个文件开始打包.你能定义一个入口点(常见于单页应用 - Single-Page Application), 或者多个入 ...

  9. js调用.net后台事件,和后台调用前台等方法总结(转帖)

    js调用.net后台事件,和后台调用前台等方法总结 原文来自:http://hi.baidu.com/xiaowei0705/blog/item/4d56163f5e4bf616bba16725.ht ...

  10. textwrap 笔记

    import textwrap s = """Look into my eyes, look into my eyes, the eyes, the eyes, the ...