RecycleView适配器的封装
来源:互联网 发布:全国姓名数据库 官方 编辑:程序博客网 时间:2024/05/29 07:14
BaseAdapter的封装
package com.diction.app.android.base.recycle_adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java.util.Collections;import java.util.List;public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> { protected final List<T> mItems; protected final Context mContext; protected LayoutInflater mInflater; private OnItemClickListener mClickListener; private OnItemLongClickListener mLongClickListener; public BaseRecyclerAdapter(Context ctx, List<T> list) { mItems = (list != null) ? list : new ArrayList<T>(); mContext = ctx; mInflater = LayoutInflater.from(ctx); } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final RecyclerViewHolder holder = new RecyclerViewHolder(mInflater.inflate(getItemLayoutId(viewType), parent, false)); if (mClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mClickListener.onItemClick(holder.itemView, holder.getLayoutPosition()); } }); } if (mLongClickListener != null) { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mLongClickListener.onItemLongClick(holder.itemView, holder.getLayoutPosition()); return true; } }); } return holder; } @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { bindData(holder, position, mItems.get(position)); } @Override public int getItemCount() { return mItems.size(); } public void add(int pos, T item) { mItems.add(pos, item); notifyItemInserted(pos); } public void delete(int pos) { mItems.remove(pos); notifyItemRemoved(pos); } public void swap(int fromPosition, int toPosition) { Collections.swap(mItems, fromPosition, toPosition); notifyItemMoved(fromPosition, toPosition); } final public void setOnItemClickListener(OnItemClickListener listener) { mClickListener = listener; } final public void setOnItemLongClickListener(OnItemLongClickListener listener) { mLongClickListener = listener; } /** * 重写该方法,根据viewType设置item的layout * * @param viewType 通过重写getItemViewType()设置,默认item是0 * @return */ abstract protected int getItemLayoutId(int viewType); /** * 重写该方法进行item数据项视图的数据绑定 * * @param holder 通过holder获得item中的子View,进行数据绑定 * @param position 该item的position * @param item 映射到该item的数据 */ abstract protected void bindData(RecyclerViewHolder holder, int position, T item); public interface OnItemClickListener { void onItemClick(View itemView, int pos); } public interface OnItemLongClickListener { void onItemLongClick(View itemView, int pos); } @Override public void onViewAttachedToWindow(RecyclerViewHolder holder) { super.onViewAttachedToWindow(holder); }}
ViewHolder的封装
package com.diction.app.android.base.recycle_adapter;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.net.Uri;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.AdapterView;/** * 适用于RecyclerView的ViewHolder */public class RecyclerViewHolder extends RecyclerView.ViewHolder { /** * ViewHolder实现类,桥接模式适配AbsListView与RecyclerView的二维变化 */ ViewHolderImpl mHolderImpl ; /** * @param itemView */ public RecyclerViewHolder(View itemView) { super(itemView); mHolderImpl = new ViewHolderImpl( itemView ) ; } public Context getContext() { return mHolderImpl.mItemView.getContext() ; } /** * @param viewId * @param <T> * @return */ public <T extends View> T findViewById(int viewId) { return mHolderImpl.findViewById(viewId); } public View getItemView() { return mHolderImpl.getItemView(); } public RecyclerViewHolder setText(int viewId, int stringId) { mHolderImpl.setText(viewId, stringId); return this; } public RecyclerViewHolder setText(int viewId, String text) { mHolderImpl.setText(viewId, text); return this; } public RecyclerViewHolder setTextColor(int viewId, int color) { mHolderImpl.setTextColor(viewId, color); return this; } /** * @param viewId * @param color */ public RecyclerViewHolder setBackgroundColor(int viewId, int color) { mHolderImpl.setBackgroundColor(viewId, color); return this; } /** * @param viewId * @param resId */ public RecyclerViewHolder setBackgroundResource(int viewId, int resId) { mHolderImpl.setBackgroundResource(viewId, resId); return this; } /** * @param viewId * @param drawable */ public RecyclerViewHolder setBackgroundDrawable(int viewId, Drawable drawable) { mHolderImpl.setBackgroundDrawable(viewId, drawable); return this; } /** * @param viewId * @param drawable */ @TargetApi(16) public RecyclerViewHolder setBackground(int viewId, Drawable drawable) { mHolderImpl.setBackground(viewId, drawable); return this; } public RecyclerViewHolder setImageBitmap(int viewId, Bitmap bitmap) { mHolderImpl.setImageBitmap(viewId, bitmap); return this; } public RecyclerViewHolder setImageResource(int viewId, int resId) { mHolderImpl.setImageResource(viewId, resId); return this; } public RecyclerViewHolder setImageDrawable(int viewId, Drawable drawable) { mHolderImpl.setImageDrawable(viewId, drawable); return this; } public RecyclerViewHolder setImageDrawable(int viewId, Uri uri) { mHolderImpl.setImageDrawable(viewId, uri); return this; } @TargetApi(16) public RecyclerViewHolder setImageAlpha(int viewId, int alpha) { mHolderImpl.setImageAlpha(viewId, alpha); return this; } public RecyclerViewHolder setChecked(int viewId, boolean checked) { mHolderImpl.setChecked(viewId, checked); return this; } public RecyclerViewHolder setProgress(int viewId, int progress) { mHolderImpl.setProgress(viewId, progress); return this; } public RecyclerViewHolder setProgress(int viewId, int progress, int max) { mHolderImpl.setProgress(viewId, progress, max); return this; } public RecyclerViewHolder setMax(int viewId, int max) { mHolderImpl.setMax(viewId, max); return this; } public RecyclerViewHolder setRating(int viewId, float rating) { mHolderImpl.setRating(viewId, rating); return this; } public RecyclerViewHolder setVisibility(int viewId, int visible) { mHolderImpl.setVisibility(viewId, visible); return this; } public RecyclerViewHolder setRating(int viewId, float rating, int max) { mHolderImpl.setRating(viewId, rating, max); return this; } public RecyclerViewHolder setOnClickListener(int viewId, View.OnClickListener listener) { mHolderImpl.setOnClickListener(viewId, listener); return this; } public RecyclerViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) { mHolderImpl.setOnTouchListener(viewId, listener); return this; } public RecyclerViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) { mHolderImpl.setOnLongClickListener(viewId, listener); return this; } public RecyclerViewHolder setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener) { mHolderImpl.setOnItemClickListener(viewId, listener); return this; } public RecyclerViewHolder setOnItemLongClickListener(int viewId, AdapterView.OnItemLongClickListener listener) { mHolderImpl.setOnItemLongClickListener(viewId, listener); return this; } public RecyclerViewHolder setOnItemSelectedClickListener(int viewId, AdapterView.OnItemSelectedListener listener) { mHolderImpl.setOnItemSelectedClickListener(viewId, listener); return this; }}
viewHolder的桥接类
package com.diction.app.android.base.recycle_adapter;import android.annotation.TargetApi;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.net.Uri;import android.util.SparseArray;import android.view.View;import android.widget.AdapterView;import android.widget.Checkable;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.RatingBar;import android.widget.TextView;/** * Created by hgm on 2017/2/5. */public class ViewHolderImpl { /** * 缓存子视图,key为view id, 值为View。 */ private SparseArray<View> mCahceViews = new SparseArray<View>(); /** * Item View */ View mItemView; /** * @param itemView */ ViewHolderImpl(View itemView) { mItemView = itemView; } public View getItemView() { return mItemView; } /** * @param viewId * @param <T> * @return */ public <T extends View> T findViewById(int viewId) { View target = mCahceViews.get(viewId); if (target == null) { target = mItemView.findViewById(viewId); mCahceViews.put(viewId, target); } return (T) target; } public void setText(int viewId, int stringId) { TextView textView = findViewById(viewId); textView.setText(stringId); } public void setText(int viewId, String text) { TextView textView = findViewById(viewId); textView.setText(text); } public void setTextColor(int viewId, int color) { TextView textView = findViewById(viewId); textView.setTextColor(color); } /** * @param viewId * @param color */ public void setBackgroundColor(int viewId, int color) { View target = findViewById(viewId); target.setBackgroundColor(color); } /** * @param viewId * @param resId */ public void setBackgroundResource(int viewId, int resId) { View target = findViewById(viewId); target.setBackgroundResource(resId); } /** * @param viewId * @param drawable */ public void setBackgroundDrawable(int viewId, Drawable drawable) { View target = findViewById(viewId); target.setBackgroundDrawable(drawable); } /** * @param viewId * @param drawable */ @TargetApi(16) public void setBackground(int viewId, Drawable drawable) { View target = findViewById(viewId); target.setBackground(drawable); } public void setImageBitmap(int viewId, Bitmap bitmap) { ImageView target = findViewById(viewId); target.setImageBitmap(bitmap); } public void setImageResource(int viewId, int resId) { ImageView target = findViewById(viewId); target.setImageResource(resId); } public void setImageDrawable(int viewId, Drawable drawable) { ImageView target = findViewById(viewId); target.setImageDrawable(drawable); } public void setImageDrawable(int viewId, Uri uri) { ImageView target = findViewById(viewId); target.setImageURI(uri); } @TargetApi(16) public void setImageAlpha(int viewId, int alpha) { ImageView target = findViewById(viewId); target.setImageAlpha(alpha); } public void setChecked(int viewId, boolean checked) { Checkable checkable = findViewById(viewId); checkable.setChecked(checked); } public void setProgress(int viewId, int progress) { ProgressBar view = findViewById(viewId); view.setProgress(progress); } public void setProgress(int viewId, int progress, int max) { ProgressBar view = findViewById(viewId); view.setMax(max); view.setProgress(progress); } public void setMax(int viewId, int max) { ProgressBar view = findViewById(viewId); view.setMax(max); } public void setRating(int viewId, float rating) { RatingBar view = findViewById(viewId); view.setRating(rating); } public void setVisibility(int viewId, int visible) { View view = findViewById(viewId); view.setVisibility(visible); } public void setRating(int viewId, float rating, int max) { RatingBar view = findViewById(viewId); view.setMax(max); view.setRating(rating); } public void setOnClickListener(int viewId, View.OnClickListener listener) { View view = findViewById(viewId); view.setOnClickListener(listener); } public void setOnTouchListener(int viewId, View.OnTouchListener listener) { View view = findViewById(viewId); view.setOnTouchListener(listener); } public void setOnLongClickListener(int viewId, View.OnLongClickListener listener) { View view = findViewById(viewId); view.setOnLongClickListener(listener); } public void setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener) { AdapterView view = findViewById(viewId); view.setOnItemClickListener(listener); } public void setOnItemLongClickListener(int viewId, AdapterView.OnItemLongClickListener listener) { AdapterView view = findViewById(viewId); view.setOnItemLongClickListener(listener); } public void setOnItemSelectedClickListener(int viewId, AdapterView.OnItemSelectedListener listener) { AdapterView view = findViewById(viewId); view.setOnItemSelectedListener(listener); }}
0 0
- RecycleView适配器的封装
- RecycleView的适配器
- RecycleView Adapter的封装
- Recycleview的adapter封装
- 超级好用的仿recycleview的listview适配器与viewholder封装
- recycleview适配器
- ReCycleView的 Adapter的封装
- android recycleView的进一步封装
- RecycleView.Adapt的简单封装
- Recycleview的使用以及编写Recycleview适配器的框架-BaseRecyclerViewAdapterHelper
- Listview的适配器封装
- 适配器的封装
- 【recyclerview封装】recycleview上拉加载 下拉刷新,加载更多,适配器全面封装。
- 一步一步的来封装自己的RecycleView
- android:RecycleView的简单封装使用
- 比较好用的RecycleView封装
- 万能RecycleView适配器
- 打造RecycleView 通用适配器
- linux 基础学习之目录与文件处理命令
- 解决SpringMVC中@Responsebody 的返回值中必须添加转义双引号的问题
- PopupWindow(上)
- QML中ListView的高级使用之增加ScrollBar以及设置ScrollBar的样式
- 算法基础:堆排序原理及其实现
- RecycleView适配器的封装
- 内存模型
- ubuntu16 切换python版本
- Mysql--Histore(Mybatis)批量查询操作
- Android 判断通知栏是否打开及前往设置页面
- 处理map类型的json数据——把map转化为json格式
- kafka基本操作
- Java复习之泛型
- 初识OneNote 2016