Android RecyclerView
来源:互联网 发布:外卖送餐员用什么软件 编辑:程序博客网 时间:2024/06/05 04:24
参考网址http://blog.csdn.net/skykingf/article/details/50827141
①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还有StaggeredGridLayoutManager等),也就是说RecylerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。你想控制Item的分隔线,可以通过继承RecylerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecylerView有其自己默认的实现。
recyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this ); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置为垂直布局,这也是默认的 layoutManager.setOrientation(OrientationHelper. VERTICAL); //设置Adapter //recyclerView.setAdapter( recycleAdapter); //适配器recyclerView.setAdapter(new MyRecyclerAdapter(this, mDatas));//设置分隔线 recyclerView.addItemDecoration( new DividerGridItemDecoration(this )); //设置增加或删除条目的动画 recyclerView.setItemAnimator( new DefaultItemAnimator());
RecyclerView.Adapter,需要实现3个方法:
①onCreateViewHolder()
这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
②onBindViewHolder()
这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。
③getItemCount()
这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { private List<String> mDatas; private Context mContext; private LayoutInflater inflater; public MyRecyclerAdapter(Context context, List<String> datas){ this. mContext=context; this. mDatas=datas; inflater=LayoutInflater. from(mContext); } @Override public int getItemCount() { return mDatas.size(); } //填充onCreateViewHolder方法返回的holder中的控件 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder.tv.setText( mDatas.get(position)); } //重写onCreateViewHolder方法,返回一个自定义的ViewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_home,parent, false); MyViewHolder holder= new MyViewHolder(view); return holder; } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View view) { super(view); tv=(TextView) view.findViewById(R.id.tv_item); } }}
recycleView布局
①LinearLayoutManager即线性布局,这个是在上面的例子中我们用到的布局
②GridLayoutManager即表格布局
mRecyclerView.setLayoutManager(new GridLayoutManager(this,4));
③StaggeredGridLayoutManager即流式布局,如瀑布流效果
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL));mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, SggeredGridLayoutManager.VERTICAL));
参考网址http://blog.csdn.net/skykingf/article/details/50827141
点击事件实现
1,点击事件接口
public interface OnItemClickListener{ void onItemClick(View view, int position);}
2,MyViewHolder实现接口
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView tv; OnItemClickListener onItemClickListener; public MyViewHolder(View view, OnItemClickListener onItemClickListener) { super(view); this.onItemClickListener = onItemClickListener; tv=(TextView) view.findViewById(R.id.tv_item); view.setOnClickListener(this); } @Override public void onClick(View v) { if (onItemClickListener!=null) { onItemClickListener.onItemClick(v, getAdapterPosition()); } }}
3,MyRecyclerAdapter传入onItemClickListener给MyViewHolder
//重写onCreateViewHolder方法,返回一个自定义的ViewHolder@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_home,parent, false); MyViewHolder holder= new MyViewHolder(view, mOnItemClickListener); return holder;}public void setOnItemClickListener(OnItemClickListener onItemClickListener ){ this. mOnItemClickListener=onItemClickListener;}
4, Activity实现点击事件
@Overridepublic void onItemClick(View view, int position) { Toast.makeText(getActivity(), position+"", Toast.LENGTH_SHORT).show();}
参考网址http://blog.csdn.net/guxiao1201/article/details/40423361
- Android RecyclerView
- android RecyclerView
- android-RecyclerView
- Android RecyclerView
- Android RecyclerView
- Android--RecyclerView
- Android RecyclerView
- Android RecyclerView
- android RecyclerView
- Android RecyclerView
- Android RecyclerView
- android RecyclerView
- Android RecyclerView
- Android RecyclerView
- [Android]RecyclerView
- Android RecyclerView
- Android RecyclerView
- android recyclerview
- 【iOS自动约束】使用Masonry导致内存持续增长问题分析
- mardown-guidance-self.md
- oracle 安装提示无法访问临时目录文件位置
- 安装部署(十) Ubuntu下安装R和RMySQL驱动
- Apache Curator入门实战
- Android RecyclerView
- HTML链接标签
- MFC控件之ListBox
- 8.外观模式/门面模式(Facade)
- FreeCMS视频教程 设置首页默认打开站点
- js 事件对象
- .net c# vs自动递增版本号
- C++11 中 Class
- 最长递增子序列,(搜狐[编程题]马戏团)