RecyclerView通用适配器Adapter,对Adapter的封装
来源:互联网 发布:coc国王升级数据 编辑:程序博客网 时间:2024/05/01 10:22
一、通用ViewHolder
RecyclerView要求必须使用ViewHolder模式,一般我们在使用过程中,都需要去建立一个新的ViewHolder然后作为泛型传入Adapter。那么想要建立通用的Adapter,必须有个通用的ViewHolder。
首先我们确定下ViewHolder的主要的作用,实际上是通过成员变量存储对应的convertView中需要操作的字View,避免每次findViewById,从而提升运行的效率。
public class ViewHolder extends RecyclerView.ViewHolder{ private SparseArray<View> mViews; private View mConvertView; private Context mContext; public ViewHolder(Context context, View itemView, ViewGroup parent) { super(itemView); mContext = context; mConvertView = itemView; mViews = new SparseArray<View>(); } public static ViewHolder get(Context context, ViewGroup parent, int layoutId) { View itemView = LayoutInflater.from(context).inflate(layoutId, parent, false); ViewHolder holder = new ViewHolder(context, itemView, parent, position); return holder; } /** * 通过viewId获取控件 * * @param viewId * @return */ public <T extends View> T getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mConvertView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } public ViewHolder setText(int viewId, String text) { TextView tv = getView(viewId); tv.setText(text); return this; } public ViewHolder setImageResource(int viewId, int resId) { ImageView view = getView(viewId); view.setImageResource(resId); eturn this; } public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; }
}二、通用的Adapter
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder>{ protected Context mContext; protected int mLayoutId; protected List<T> mDatas; protected LayoutInflater mInflater; public CommonAdapter(Context context, int layoutId, List<T> datas) { mContext = context; mInflater = LayoutInflater.from(context); mLayoutId = layoutId; mDatas = datas; } @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { ViewHolder viewHolder = ViewHolder.get(mContext, parent, mLayoutId); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { convert(holder, mDatas.get(position)); } public abstract void convert(ViewHolder holder, T t); @Override public int getItemCount() { return mDatas.size(); }}
三、使用
mRecyclerView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas){ @Override public void convert(ViewHolder holder, String s) { holder.setText(R.id.id_item_list_title,s); }});
Android学习交流①群 152643026
2 0
- RecyclerView通用适配器Adapter,对Adapter的封装
- 通用的RecyclerView Adapter适配器
- Android RecyclerView通用Adapter封装
- RecyclerView.Adapter的封装
- 为你的RecyclerView.Adapter添加通用DiffUtil适配器
- 打造 RecyclerView的 通用Adapter
- 实现RecyclerView 的通用Adapter
- 通用的recyclerview adapter 适配
- Recyclerview Adapter 的简单封装
- RecyclerView.Adapter 的简单封装
- 简单封装RecyclerView的Adapter
- Android 封装RecyclerView的Adapter
- RecyclerView.Adapter的基本封装
- 关于RecyclerView的Adapter封装
- 针对recyclerView的adapter封装
- RecyclerView.Adapter 简化适配器
- Android 对封装RecyclerView.Adapter讲解
- 封装RecyclerView.Adapter
- android app瘦身
- 在mysql Navicat中怎样设置ID自动递增
- BZOJ 4197: [Noi2015]寿司晚宴 DP
- untiy 2D角色控制器
- SDWebImage、NSURL
- RecyclerView通用适配器Adapter,对Adapter的封装
- 剑指offer---二叉树的镜像---java实现
- java框架之spring基础应用
- Gradle version 2.2 is required. Current version is 2.10.
- python学习第三章(字典dict)
- 决策树
- springMVC + ProgressListener + CommonsMultipartResolver 上传进度查询
- HorseRace
- 第一个Servlet程序