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 ...
随机推荐
- hello1分析
1:选择hello1文件夹并单击“打开项目”.展开“Web页”节点,然后双击该index.xhtml文件以在编辑器中查看它. 该index.xhtml文件是Facelets应用程序的默认登录页面.在典 ...
- day3 反射与动态代理
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- 安装windows系统时遇到的大坑——鼠标键盘没反应
进入安装系统界面时,鼠标键盘没反应,换到其他usb接口也不行 解决方法如下,需要进入bios设置两个地方,设置如下 安装好系统(win7)之后,还遇到了两个问题,一个是驱动没安装,插U盘也没反应,一个 ...
- hive GenericUDF1
和UDF相比,通用GDF(GenericUDF)支持复杂类型(比如List,struct等)的输入和输出. 下面来看一个小示例. Hive中whereme表中包含若干人的行程如下: A 2 ...
- 使用prometheus+ grafana+nginx-module-vts 模块监控openresty
nginx-module-vts 是一个很不错的nginx 模块,我们可以用来,方便的分析系统的请求状态 同时支持基于prometheus 的监控, 我参考openresty 的docker镜像已 ...
- Android开发之GridView的使用(解读谷歌官方API)
GridView将图片显示在二维可移动的网格里.使用ListAdapter能够将Grid项目自己主动填充满整个布局. 以下我们依据官方文档的样例来实现一下使用GridView,点击视图里的 ...
- oracle-srvctl-output
############################## [grid@rac01 ~]$ crsctl query crs administratorCRS Administrator List: ...
- JavaScript 中 this的指向
this 一方面便利了让大家在JS开发当, 但是另一方面让开发者头痛的是不清楚this 指代什么. 指向全局Window: <script> console.log(this); < ...
- What happens to our code? JavaScript 代码是怎样执行的
1. 我们的代码第一步会被parser 语法分析程序分析. 如果没有报错之后 2. 生产SyntaxTree, 我们的代码会转换成machine code 3. 最终 我们的代码会被运行出来. 下面的 ...
- shiro学习笔记
一.概念: shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证.权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. (一)shiro的功能 ...