RecyclerView 是在Android5.0之后推出的,是一个比ListView更加灵活更加高效的适配器类型控件。但是RecyclerView不同于其他类型的适配器,它还需要一个LayoutManager进行页面控制展示。
RecyclerView提供了三种布局管理器:
1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果
RecyclerView的使用:
1、引入RecyclerView依赖包,V7下的,兼容到API17.
2、在xml布局中声明,在Java代码中初始化。
3、设置布局管理器
4、创建适配器,设置数据源,绑定适配器
具体创建适配器:①创建一个类,继承RecyclerView.Adapter<ViewHolder>.
②创建一个类ViewHolder,继承RecyclerView。VIewHolder,该类需要创建一个匹配父类的构造。
③重写适配器中的方法:getItemCount():获取数据源的个数(item的数量);onCreateViewHolder():该方法中导入布局,实例化VIewHolder;onBindViewHolder():绑定VIewHolder,加载数据。
具体代码:
适配器Adapter中:
public class MyRecyclerviewAdapter extends RecyclerView.Adapter<MyViewHolder> { private Context context; private List<Bean.DataBean.ForumListBean.GroupBean> list; public MyRecyclerviewAdapter(Context context, List<Bean.DataBean.ForumListBean.GroupBean> list) { this.context = context; this.list = list; } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder=new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recycler_item,parent)); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(list.get(position).getName()); } @Override public int getItemCount() { return list.size(); } } class MyViewHolder extends RecyclerView.ViewHolder{ TextView tv; ImageView iv; public MyViewHolder(View itemView) { super(itemView); iv= (ImageView) itemView.findViewById(R.id.iv_image); tv=(TextView) itemView.findViewById(R.id.tv_name); } }
activity代码:
mrecycler = (RecyclerView) findViewById(R.id.recycler); //设置布局管理器 //listview mrecycler.setLayoutManager(new LinearLayoutManager(this)); //gridview // mrecycler.setLayoutManager(new GridLayoutManager(this,4)); //瀑布流 // mrecycler.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL)); //设置adapter adapter = new MyRecyclerAdapter(this, list); mrecycler.setAdapter(adapter);
由于RecyclerView 为开发者提供了强大的复用机制,但是所有的点击事件都丢了,没有提供默认的点击事件,所以需要我们自己为RecyclerView手动实现点击。
首先创建一个类,实现RecyclerView的OnItemTouchListener,重写方法:
package com.bwei.test.lianxi.util; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; /** * Created by zhangjie on 2016/11/11. */ public class RecyclerItem implements RecyclerView.OnItemTouchListener{ private OnItemClickListener mListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItem(Context context, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildPosition(childView)); return true; } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } }
本文详细介绍了RecyclerView的使用方法,包括其特点、所需依赖、不同类型的布局管理器(LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager),以及如何创建适配器并实现点击事件。

被折叠的 条评论
为什么被折叠?



