万能的RecyclerViewAdapter
来源:互联网 发布:linux中的cut命令 编辑:程序博客网 时间:2024/06/07 05:03
我之前在慕课网看过一篇怎么写万能ListView的Adapter的视频.
之后移植到自己的项目之后发现使用非常的方便.
现在用到RecyclerView一没有了,发现很不方便.
于是自己就模仿写了一下万能的RecyclerViewAdapter,使用起来也很方便.
现在记录下来,可以以防忘记,也可以分享给大家.
首先是万能的RecylerViewHolder
/** * Created by sam_m on 15/7/13. */public class CommRecyclerViewHolder extends RecyclerView.ViewHolder { private SparseArray<View> mView; private int position; private int itemType; private ImageLoader imageLoader; public CommRecyclerViewHolder(View itemView, ViewGroup parent, int itemType) { super(itemView); this.itemType = itemType; this.mView = new SparseArray<View>(); imageLoader = ImageLoader.getInstance(); } public static CommRecyclerViewHolder getCommRecyclerViewHolder(Context context, ViewGroup parent, int layoutId, int itemType) { CommRecyclerViewHolder holder = new CommRecyclerViewHolder(LayoutInflater.from(context).inflate(layoutId, parent, false), parent, itemType); return holder; } public int getItemType() { return itemType; } public void setPosition(int position) { this.position = position; } /** * 通过ViewId获取控件 * * @param viewId * @param <T> * @return */ public <T extends View> T getView(int viewId) { View view = mView.get(viewId); if (view == null) { view = itemView.findViewById(viewId); mView.put(viewId, view); } return (T) view; } public View getConvertView() { return itemView; } public View getItemView() { return itemView; } public CommRecyclerViewHolder setText(int viewId, String content) { TextView textView = getView(viewId); textView.setText(content); return this; } public CommRecyclerViewHolder setText(int viewId, CharSequence content) { TextView textView = getView(viewId); textView.setText(content); return this; } }
这个结合了万能的ViewHolder的RecyclerViewAdapter.
/** * Created by sam_m on 15/7/14. */public abstract class CommRecyclerAdapter<T> extends RecyclerView.Adapter<CommRecyclerViewHolder> { protected Context mContext; protected List<T> mdate; /** * Item的点击事件 */ protected OnItemClickListener onItemClick; public CommRecyclerAdapter(Context context) { mContext = context; mdate = new ArrayList(); } public void setData(List<T> list) { this.mdate.addAll(list); notifyDataSetChanged(); } public void addItem(T date) { mdate.add(date); notifyDataSetChanged(); } public void addItem(T date, int positon) { mdate.add(positon, date); notifyItemInserted(positon); } public void removeItem(int positon) { mdate.remove(positon); notifyItemRemoved(positon); } public void clearDate() { mdate.clear(); notifyDataSetChanged(); } public OnItemClickListener getOnItemClick() { return onItemClick; } public void setOnItemClick(OnItemClickListener onItemClick) { this.onItemClick = onItemClick; } @Override public CommRecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { CommRecyclerViewHolder holder = CommRecyclerViewHolder.getCommRecyclerViewHolder(mContext, viewGroup, R.layout.item_layout_function, i); holder.getConvertView().setOnClickListener(onClickListener); holder.getConvertView().setTag(holder); return holder; } private final View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClick!=null){ CommRecyclerViewHolder holder = (CommRecyclerViewHolder) v.getTag(); onItemClick.onItemClick(v,holder.getPosition()); } } }; @Override public void onBindViewHolder(CommRecyclerViewHolder commRecyclerViewHolder, int i) { convert(commRecyclerViewHolder, mdate.get(i)); } public abstract void convert(CommRecyclerViewHolder viewHolder, T t); @Override public int getItemCount() { return mdate.size(); } public interface OnItemClickListener{ void onItemClick( View view, int position); }}
最后在Activity或者Fragment里面用
RecyclerView mRecyclerView = (RecyclerView) rootView.findViewById(R.id.id_recyclerview_horizontal); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(linearLayoutManager); //设置适配器 CommRecyclerAdapter messageRAdapter = new CommRecyclerAdapter<MainMessage>(getActivity()) { @Override public void convert(CommRecyclerViewHolder viewHolder, MainMessage mainMessage) { //对对应的View进行赋值 viewHolder.setText(R.id.item_timer, mainMessage.getTimer()); viewHolder.setText(R.id.item_sender, mainMessage.getSender()); viewHolder.setText(R.id.item_title, mainMessage.getTitle()); } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } }; //设置item点击事件 messageRAdapter.setOnItemClick(new CommRecyclerAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { } }); mRecyclerView.setAdapter(messageRAdapter); //加动画效果 mRecyclerView.setItemAnimator(new DefaultItemAnimator());
0 0
- 万能的RecyclerViewAdapter
- 万能RecyclerViewAdapter
- 福利:打造一个万能的RecyclerViewAdapter
- 万能的RecyclerViewAdapter,支持上拉加载、添加HeadView
- 带标题的RecyclerViewAdapter
- 针对DataBinding的RecyclerViewAdapter
- RecyclerViewAdapter
- RecyclerViewadapter
- Android 可分组的RecyclerViewAdapter
- 含有HeaderView和FooterView的RecyclerViewAdapter
- 灵活且强大的RecyclerViewAdapter源码分析
- 灵活且强大的RecyclerViewAdapter源码分析
- 灵活且强大的RecyclerViewAdapter源码分析
- 灵活且强大的RecyclerViewAdapter源码分析
- 灵活且强大的RecyclerViewAdapter源码分析
- Android 轻松定制属于自己的RecyclerViewAdapter
- 基类RecyclerViewAdapter以及BaseViewHolder。减少适配器的重复代码量
- XAdapter:支持下拉刷新加载和添加多个header和footer的RecyclerViewAdapter
- 无法启动MYSQL服务”1067 进程意外终止”解决办法——汇总及终极方法
- mysql中timestamp,datetime,int类型的区别与优劣
- 文章标题
- MAC下的VIM开启语法高亮的简单方法
- POJ 3320: Jessicas Reading Problem
- 万能的RecyclerViewAdapter
- [leetcode] 153.Find Minimum in Rotated Sorted Array
- jQuery的 dataTable 2
- 伙伴算法
- Android 开发经验谈-很少有人会告诉你的Android开发基本常识
- HDU-3952-Fruit Ninja
- 关于UILabel的宽高自适应
- IT职业生涯
- Phone List(C++ vector容器)