RecyclerView的简单介绍和实现
2017-09-21 19:58
190 查看
在这里简单实现一下RecyclerView如果各位还想更深入的了解一些RecyclerView相关的内容那本篇文章只适合初识RecyclerView的朋友
RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。你想要控制其显示的方式,请通过布局管理器LayoutManager
你想要控制Item间的间隔(可绘制),请通过ItemDecoration
你想要控制Item增删的动画,请通过ItemAnimator
你想要控制点击、长按事件,请自己写
RecyclerView的这个名字了,从它类名上看,RecyclerView代表的意义是,我只管Recycler View,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置。可以看出其高度的解耦,给予你充分的定制自由(所以你才可以轻松的通过这个控件实现ListView,GirdView,瀑布流等效果)。
RecyclerView的使用代码
首先要添加依赖
compile'cn.lemon:RefreshRecyclerView:1.2.0'
mRecyclerView = findView(R.id.id_recyclerview);//设置布局管理器mRecyclerView.setLayoutManager(layout);//设置adaptermRecyclerView.setAdapter(adapter)//设置Item增加、移除动画mRecyclerView.setItemAnimator(new
DefaultItemAnimator());//添加分割线mRecyclerView.addItemDecoration(new
DividerItemDecoration(getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
第一步
因为我们RecyclerView的每一条item都是一个viewholder所以我们要先定义一个viewholder类MyViewHolder
需要在这里找到控件做多条目的时候所有的控件id都要找到
public classMyViewHolderextendsRecyclerView.ViewHolder { publicTextViewtext,text1; publicImageViewimg; publicMyViewHolder(View itemView) { super(itemView); text= (TextView) itemView.findViewById(R.id.text); text1= (TextView) itemView.findViewById(R.id.text1); img= (ImageView) itemView.findViewById(R.id.img); } }
第二步
我们需要写一个适配器的类
MyAdapter我们都知道在使用listview的时候写的适配器需要继承BaseAdapter但是我们使用
RecyclerView的时候需要继承他们封装好的一个类
RecyclerView.Adapter<MyViewHolder>我们看到这里需要一个泛型,泛型这里是你自定义的viewholder类
上面也说了RecyclerView没有提供点击方法所以我们需要自定义一个下面在代码里写的很清楚
创建一个接口
public classMyAdapterextendsRecyclerView.Adapter<MyViewHolder>{ privateContextcontext; privateList<String>list=newArrayList<>(); publicMyAdapter(Context context) { this.context= context; for(inti=0;i<10;i++){ list.add("姚翔-->"+i); } } @Override publicMyViewHolderonCreateViewHolder(ViewGroup parent, int viewType) { View view=null; switch(viewType){ case0: view=View.inflate(context,R.layout.irem,null); break; case1: view=View.inflate(context,R.layout.item,null); break; default: break; } finalMyViewHolder holder=newMyViewHolder(view); if(listner!=null){ view.setOnClickListener(newView.OnClickListener() { @Override public void onClick(View view) { //holder.getLayoutPosition()获取点击的条目位置; listner.onItemClick(view,holder.getLayoutPosition()); } }); view.setOnLongClickListener(newView.OnLongClickListener() { @Override public boolean onLongClick(View view) { listner.onLongItemClick(view,holder.getLayoutPosition()); //防止与click事件冲突 return true; } }); } returnholder; } //赋值数据 @Override public void onBindViewHolder(MyViewHolder holder, int pos 4000 ition) { inttype = getItemViewType(position); switch(type){ case0: holder.text.setText(list.get(position)); break; case1: holder.text1.setText(list.get(position)); break; default: break; } } @Override public int getItemCount() { returnlist.size(); } //点击事件; privateOnClickRecyclerListner1listner; //设置点击事件; public void setLisner(OnClickRecyclerListner1 lisner){ this.listner=lisner; } //设置多条目 @Override public int getItemViewType(intposition) { if(position%2==0){ return1; } return0; } //创建一个接口的内部类 或者直接在外面创建也是可以的 public interface OnClickRecyclerListner1 { //点击事件 voidonItemClick(View view, int position); //长安点击事件,也可以在写触摸事件 voidonLongItemClick(View view,intposition); } }
第三部
在main方法里对RecyclerView进行绑定适配器了
找控件在这就不多说了
先绑定RecyclerView的布局结构
recyclerview.setLayoutManager(在这里方布局管理器);
布局管理器基本有三大类
//线性布局
LinearLayoutManager manager = new LinearLayoutManager(this);
//网格布局
GridLayoutManager glide = new GridLayoutManager(this, 3);
//瀑布流布局
StaggeredGridLayoutManager stage = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
然后绑定我们上面写好的适配器的类
这时候可以需要
//添加分割线,DividerItemDecoration.VERTICAL=纵向显示数据时添加的分割线;
recyclerview.addItemDecoration(newDividerItemDecoration(this,DividerItemDecoration.VERTICAL));
recyclerview.addItemDecoration(newDividerItemDecoration(this,DividerItemDecoration.HORIZONTAL));
如果这时候需要点击事件的话就可以用得到上面我们定义的那个接口了
只需要用adapter适配器调用我们对应的实例点击事件的接口的方法就可以了
adapter.setLisner(newMyAdapter.OnClickRecyclerListner1() { @Override public void onItemClick(View view, intposition) { Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_LONG).show(); } @Override public void onLongItemClick(View view, intposition) { Toast.makeText(MainActivity.this,position+" 长摁",Toast.LENGTH_SHORT).show(); } });
相关文章推荐
- 简单实现recyclerview禁止滑动
- RecyclerView添加点击和长按事件的简单实现
- RecyclerView的简单使用,实现下拉刷新、上拉加载
- xRecyclerView简单实现下拉刷新和上拉加载
- 【Android UI设计与开发】1.引导界面(一)ViewPager介绍和简单实现
- Android XRecyclerView简单实现上拉刷新,下拉加载
- Android简单的实现RecyclerView
- RecyclerView上下拖动条目排序,左右划出屏幕删除条目的最简单的实现
- Android 整合实现简单易用、功能强大的RecyclerView
- Android 整合实现简单易用、功能强大的RecyclerView
- Android 时间轴的实现(RecyclerView更简单)
- android 简单实现 RecyclerView 下拉刷新上拉加载
- Android RecyclerView(超简单)实现可展开列表——单项展开
- Android RecyclerView与泛型 简单实现多布局
- 简单的自定义RecyclerView.LayoutManager实现重叠排放功能
- RecyclerView介绍(三)----实现GridView效果
- RecyclerView介绍(五)----实现点击效果以及动画
- Android 整合实现简单易用、功能强大的RecyclerView
- 使用RecyclerView实现简单的聊天页面
- Recyclerview嵌套Recyclerview实现简单购物车