RecyclerAdapter封装
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封装的更多相关文章
- RecyclerView的通用适配器,和滚动时不加载图片的封装
对于RecyclerView我们需要使用RecyclerAdapter,使用方式与ListViewAdapter类似,具体代码大家可以在网上搜索,这里就只教大家使用封装后的简洁RecyclerAdap ...
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
随机推荐
- Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法
Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法: https://blog.csdn.net/mingjie1212/article/details/485250 ...
- linux后台运行之&和nohup区别,模拟后台守护进程
先来看一下&的使用 root@BP:~# cat test.sh #!/bin/bash while true do echo "linux">/dev/null d ...
- Android蓝牙学习笔记
一 Bluetooth基本概念 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备.计算机及其终端设备.各种数字数据系统.甚至家用电器采用无线方式联接起来.它的传输距离为10cm-10m,如果增加 ...
- MySQL--数据超时相关参数
=============================================== connect_timeout connect_timeout用在client和server之间建立连接 ...
- quicklink 基本使用
原理 使用可见性以及预取数据,同时充分利用浏览器的空闲时间,主要是解析href 以通过代码的选项指定需要加载的数据,当然其中 也添加了好多灵活的控制参数,方便我们使用,而且代码很小,压缩之后也就1kb ...
- lnmp安装总结
1.安装准备 建一个目录用于存放各软件包的压缩文件, 如我把我的源码文件都放在了 /software目录下 切换到/software目录下,执行 wget http://dev.mysql.com/g ...
- How to get checksum by IAR
- 05typedef struct用法详解与小结
1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程中使用typedef ...
- Spring的两种动态代理:Jdk和Cglib 的区别和实现
这是有意义的一天!自己研究一路畅通的感觉真爽 原理是参考大神的,代码手敲 一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处 ...
- 【Hi3516】 uboot下烧写BSP
setenv serverip xx.xx.xx.xx setenv ipaddr xx.xx.xx.xx setenv ethaddr xx:xx:xx:xx:xx:xx setenv netmas ...