踏平RecyclerView使用的各种坑,跟ListView和GridView说拜拜
2016-11-30 13:47
363 查看
RecyclerView是谷歌推出的新View,使用和listview差不多。
在此之前推荐一本书:跟着敲一遍你能从中级变高级,从习惯eclipse变成使用Android studio大神。
但是RecyclerView对于初学者还是有点难度,下面以最简短的代码让你一眼明白并牢记RecyclerView的使用方法
只有这四个方法简单吗??、
特别需要做的是写自己的adapter
使用步骤:
①创建RecyclerView 对象
②设置适配器adapter
完成了。。。。
所以只要会写adapter就会用RecyclerView了
最简单的使用demo可参考http://blog.csdn.net/gfg156196/article/details/51727783
使用中的过程总结:
①导包,请导入RecyclerView的包,不要选择V7包。
compile 'com.android.support:recyclerview-v7:25.0.1'
②创建自己的adapter
③创建自己的ViewHolder
④在Activity中使用RecyclerView
setLayoutManager();的参数有如下几种:
LinearLayoutManager 线性管理器。支持横向、纵向。
GridLayoutManager 网格布局管理器
StaggeredGridLayoutManager 瀑布就式布局管理器
如果需要分割线:
可以在setAdapter(recAdapter)之前或者之后都可以。
LinearLayoutManager.HORIZONTAL 表示分割线是横着画的,一般用在垂直滚动的listview。如下。
addItemDecoration该方法的参数为RecyclerView.ItemDecoration,该类为抽象类,我们需要继承它写一个自己的类。
它的源码很短,如下:
方法都没有实现,我们继承它实现自己的方法即可。
注意:onDraw方法,使用带有State state参数的方法。。
具体的画线的类如何写可以参考http://www.cnblogs.com/huolongluo/p/5879292.html
如果你实在是懒得写分割线,可以直接把别人的分割线类拿来使用。。。
在此之前推荐一本书:跟着敲一遍你能从中级变高级,从习惯eclipse变成使用Android studio大神。
但是RecyclerView对于初学者还是有点难度,下面以最简短的代码让你一眼明白并牢记RecyclerView的使用方法
mRecyclerView = findViewById(R.id.id_recyclerview); //设置布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //设置adapter mRecyclerView.setAdapter(adapter) //设置Item增加、移除动画 mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //添加分割线 mRecyclerView.addItemDecoration(new MyItemDecoration( this, MyItemDecoration.HORIZONTAL));
只有这四个方法简单吗??、
特别需要做的是写自己的adapter
使用步骤:
①创建RecyclerView 对象
②设置适配器adapter
完成了。。。。
所以只要会写adapter就会用RecyclerView了
最简单的使用demo可参考http://blog.csdn.net/gfg156196/article/details/51727783
使用中的过程总结:
①导包,请导入RecyclerView的包,不要选择V7包。
compile 'com.android.support:recyclerview-v7:25.0.1'
②创建自己的adapter
/** * Created by yugu88 on 2016/11/29.15:14 * 注意点:必须使用泛型Adapter<RecHoder> */ public class RecAdapter extends RecyclerView.Adapter<RecHoder> { Activity content; String[] menu_text; public RecAdapter(Activity content, String[] menu_text) { this.content=content; this.menu_text=menu_text; } /** * @return RecHoder 修改此返回类型为自己定义的ViewHolder */ @Override public RecHoder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater=LayoutInflater.from(content); View view=layoutInflater.inflate(R.layout.adapter_listview_menu, parent, false); return new RecHoder(view);//创建自己的ViewHolder并返回此对象 } /** * @param holder 修改此ViewHolder的类型为自己定义的RecHoder */ @Override public void onBindViewHolder(RecHoder holder, final int position) { holder.tv_menu.setText(menu_text[position]); Log.e("getItemCount",position+""); holder.tv_menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } @Override public int getItemCount() { return menu_text.length; } }
③创建自己的ViewHolder
/** * Created by yugu88 on 2016/11/29.15:52 */ public class RecHoder extends RecyclerView.ViewHolder { public TextView tv_menu; public RecHoder(View itemView) { super(itemView); tv_menu=(TextView) itemView.findViewById(R.id.tv_menu); } }
④在Activity中使用RecyclerView
listview_menu=(RecyclerView) findViewById(R.id.listview_menu); listview_menu.setLayoutManager(new LinearLayoutManager(this));// 此句最最重要LinearLayoutManager就是listview类型的 //listview_menu.setLayoutManager(new GridLayoutManager(this,4));// 此为GridView类型的视图 4列 //创建adapter对象 RecAdapter recAdapter=new RecAdapter(this, menu_text); //设置adapter listview_menu.setAdapter(recAdapter);
setLayoutManager();的参数有如下几种:
LinearLayoutManager 线性管理器。支持横向、纵向。
GridLayoutManager 网格布局管理器
StaggeredGridLayoutManager 瀑布就式布局管理器
如果需要分割线:
// 第二个参数是横线或者竖线的意思 listview_menu.addItemDecoration(new RecycleViewDivider(this, LinearLayoutManager.HORIZONTAL));
可以在setAdapter(recAdapter)之前或者之后都可以。
LinearLayoutManager.HORIZONTAL 表示分割线是横着画的,一般用在垂直滚动的listview。如下。
addItemDecoration该方法的参数为RecyclerView.ItemDecoration,该类为抽象类,我们需要继承它写一个自己的类。
它的源码很短,如下:
public static abstract class ItemDecoration { public void onDraw(Canvas c, RecyclerView parent, State state) { onDraw(c, parent); } @Deprecated public void onDraw(Canvas c, RecyclerView parent) { } public void onDrawOver(Canvas c, RecyclerView parent, State state) { onDrawOver(c, parent); } @Deprecated public void onDrawOver(Canvas c, RecyclerView parent) { } @Deprecated public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { outRect.set(0, 0, 0, 0); } public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) { getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(), parent); } }
方法都没有实现,我们继承它实现自己的方法即可。
注意:onDraw方法,使用带有State state参数的方法。。
具体的画线的类如何写可以参考http://www.cnblogs.com/huolongluo/p/5879292.html
如果你实在是懒得写分割线,可以直接把别人的分割线类拿来使用。。。
相关文章推荐
- 使用RecyclerView实现ListView,GridView的效果(上下,左右滑动),拖拽与滑动删除
- Android中Recyclerview使用1----实现ListView,GridView,瀑布流样式
- ListView、GridView、RecyclerView的使用
- 使用RecyclerView实现滑动添加、滑动删除,以及瀑布流、ListView、GridView的转换
- 使用RecyclerView实现ListView,GridView效果
- Recyclerview的使用 是代替了Listview和Gridview
- 使用RecyclerView实现GridView和ListView混排的效果
- android将替代ListView的RecyclerView的使用和进阶使用,替用GallRery
- Android使用RecyclerView替代ListView(一)
- Android RecyclerView 使用解析,替代ListView
- Android 高级UI设计笔记07:RecyclerView 的使用(ListView的扩展)
- Android ListView使用convertView解决内存溢出问题(推介使用recyclerview,listview已过时)
- Android RecyclerView之代替ListView与GridView
- RecyclerView 使用总结(三):点击事件、GridView等、瀑布流、动态增删
- Android RecyclerView 的基本使用之GridView
- [置顶] 一个适用于ListView/GridView/RecyclerView的通用适配器
- android RecyclerView 使用完全解析 替代ListView(一)
- [Android]使用RecyclerView替代ListView(二)
- 如何使用Android最新的RecyclerView取代ListView?
- [Android]使用RecyclerView替代ListView(一)