RecyclerView的使用技巧
来源:互联网 发布:淘宝外卖在哪里找 编辑:程序博客网 时间:2024/06/05 02:08
参考文章:http://yat3s.com/2015/09/21/RecyclerView/
http://blog.csdn.net/liyuanjinglyj/article/details/50409576
RecyclerView(ListView)在一个App中出现的频率还是非常高的,它是官方出的一个用来替代ListView、GridView的控件,下面简单的介绍一下RecyclerView中一些简单的使用技巧。
官方
官方网址(需要翻墙)
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
官方给出的一句话解释是:
A flexible view for providing a limited window into a large data set.
Gradle
compile ‘com.android.support:recyclerview-v7:+’
建议搭配cardView使用
compile ‘com.android.support:cardview-v7:+’
使用
RecyclerView使用起来很简单,但相比于ListView来说,使用的方法还是有一点改变的。
1234
<android.support.v7.widget.RecyclerView 注意V7兼容包名 否则只能api 21才能用 android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content"/>
1234567
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(this));//线性显示(默认纵向显示) 类似于ListView// recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));//线性显示(横向显示)// recyclerView.setLayoutManager(new GridLayoutManager(this, 2));//线性宫格显示 类似于GridView// recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//瀑布流显示recyclerView.setAdapter(new RecyclerViewAdapter(this,data));
1234567891011121314151617181920212223242526272829303132333435363738394041
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { private Context context; private List<Post> posts; public RecyclerViewAdapter(Context context, List<Post> posts) { this.context = context; this.posts = posts; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_post, parent,false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder vh, int position) { vh.contentTv.setText(posts.get(position).getContent()); } @Override public int getItemCount() { return posts.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private TextView contentTv; public ViewHolder(View itemView) { super(itemView); contentTv = (TextView) itemView.findViewById(R.id.content_post_tv); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //你的点击事件 } }); } }}
做到这里就算完成了。
—————————–分割线—————————-
这些是简单的使用,不过我们可以写一个万能的Adapter来适配每一个RecyclerView,请往下看
12345678910111213141516
public class RVHolder extends RecyclerView.ViewHolder { private ViewHolder viewHolder; public RVHolder(View itemView) { super(itemView); viewHolder=ViewHolder.getViewHolder(itemView); } public ViewHolder getViewHolder() { return viewHolder; }}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
public abstract class AutoRVAdapter extends RecyclerView.Adapter<RVHolder> { public final static Integer VIEW_ITEM = 101; public final static Integer VIEW_PROG = 100; public List<?> list; public Context context; public AutoRVAdapter(Context context, List<?> list) { this.list = list; this.context = context; } @Override public RVHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(onCreateViewLayoutID(viewType),parent,false); return new RVHolder(view); } public abstract int onCreateViewLayoutID(int viewType); @Override public void onViewRecycled(final RVHolder holder) { super.onViewRecycled(holder); } @Override public void onBindViewHolder(final RVHolder holder, final int position) { onBindViewHolder(holder.getViewHolder(), position); if (onItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(null, v, holder.getPosition(), holder.getItemId()); } }); } } public abstract void onBindViewHolder(ViewHolder holder, int position); @Override public int getItemCount() { return list.size(); } private AdapterView.OnItemClickListener onItemClickListener; public AdapterView.OnItemClickListener getOnItemClickListener() { return onItemClickListener; } public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
public class ViewHolder { private SparseArray<View> viewHolder; private View view; public static ViewHolder getViewHolder(View view){ ViewHolder viewHolder = (ViewHolder) view.getTag(); if (viewHolder == null) { viewHolder = new ViewHolder(view); view.setTag(viewHolder); } return viewHolder; } private ViewHolder(View view) { this.view = view; viewHolder = new SparseArray<View>(); view.setTag(viewHolder); } public <T extends View> T get(int id) { View childView = viewHolder.get(id); if (childView == null) { childView = view.findViewById(id); viewHolder.put(id, childView); } return (T) childView; } public View getConvertView() { return view; } public TextView getTextView(int id) { return get(id); } public Button getButton(int id) { return get(id); } public ImageView getImageView(int id) { return get(id); } public void setTextView(int id,CharSequence charSequence){ getTextView(id).setText(charSequence); }}
以后我们只要集成AutoRVAdapter就好了,简单方便。
123456789101112131415
public class RecyclerViewAdapter extends AutoRVAdapter{ public RecyclerViewAdapter(Context context, List<?> list) { super(context, list); } @Override public int onCreateViewLayoutID(int viewType) { return R.layout.item_appointment; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Post post = (Post) list.get(position); holder.setTextView(R.id.text,post.getName()); }}
推荐
https://github.com/cymcsg/UltimateRecyclerView
集成了很多RecyclerView的功能,包括上拉刷新,下拉加载,加载动画,视差动画等
注意的问题
- RecyclerView嵌套在ScrollView里面是一行都不显示的(ListView显示一行)这里需要重写LayoutManager,具体可google
- 在5.0以上的手机 RecyclerView嵌套在ScrollView 重写LayoutManager后 RecyclerView的滑动惯性会消失,此时可重写ScrollView即可
- RecyclerView的使用技巧
- RecyclerView 的使用及常用技巧(一)
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView的使用
- RecyclerView的使用
- RecyclerView 的使用详解
- RecyclerView的基本使用
- RecyclerView的使用
- Android -- RecyclerView的使用
- RecyclerView的使用
- CardView,RecyclerView的使用
- 关于RecyclerView的使用
- RecyclerView的使用
- RecyclerView的使用(一)
- PopupWindow + RecyclerView的使用
- RecyclerView的简单使用
- RecyclerView 的简单使用
- recyclerview的使用
- 你的隐私安全吗:Cookie到底是什么?
- MFC自定义按钮实现CRgnButton
- PHP定界符<<<
- 杭电2952 Counting Sheep(简单BFS过)
- Unicode(UTF-8, UTF-16)令人混淆的概念
- RecyclerView的使用技巧
- android设置默认输入法
- Full Emoji Catalog
- Cookie杂学
- mysql优化-索引
- MySQL----int(M)讲解 (int(3)与int(11)的区别)
- Android开发技术周报 Issue61笔记
- Android多线程编程
- 算法设计题2.33-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版