整体认知RecyclerView , 他的特点和方案:
特点一: 不关心Item是否显示在正确的位置,也不关心它如何显示; 特点二: 不关心Item之间如何分隔; 特点三: 不关注Item增加和删除的动画效果; 特点四 :仅仅关注如何回收和复用View
特点一解决方案:通过LayoutManager来确定RecyclerView的显示风格:
recyclerView.setLayoutManager(LinearLayoutManager); recyclerView.setLayoutManager(GridLayoutManager); recyclerView.setLayoutManager(StaggeredGridLayoutManager);特点二解决方案:通过ItemDecoration定义Item之间的分隔效果:
onDraw();//绘制分隔线 onOverDraw();//绘制分隔线当然如果背景比较简单可以通过background和margin属性实现;
特点三解决方案:通过引入ItemAnimator来实现Item增删的动画效果
综上所述:可以知道RecyclerView是一个插件式的架构,他通过LayoutManager , ItemDecoration , ItemAnimator的组合来实现我们的需求.
RecyclerView首次强制开发者使用ViewHolder模式:所以他没有使用传统的BaseAdapter,而是自己提供了一个RecyclerView.Adapter;
RecyclerView能干什么?
1.ListView 2.GridView 3.横向ListView 4.横向GridView 5.瀑布流 6.定制Item增加和删除动画-----ItemAnimator 前五项是通过不同的LayoutManager就能控制 , 当然我们还可以自定义布局管理器来实现更多更丰富的效果下面我们来新建个项目来感受下RecyclerView的神奇,伟大,不可思议吧…
首先:在app的build.gradle中添加依赖
dependencies { compile 'com.android.support:recyclerview-v7:24.0.0' }第二步:在layout布局文件中添加
<android.support.v7.widget.RecyclerView android:id="@+id/id_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" />第三步创建RecyclerView的适配器
public class RSimpleAdapter extend RecyclerView.Adapter<MyViewHolder>{ private LayoutInflater mInflater; private Context mContext; private List<String> mDatas; public RSimpleAdapter(Context context, List<String> datas) { this.mContext = context; this.mDatas = datas; mInflater=LayoutInflater.from(context); } /** * 创建ViewHolder * @param parent * @param viewType * @return */ @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=mInflater.inflate(R.layout.item_single_textview,parent,false); MyViewHolder viewHolder=new MyViewHolder(view); return viewHolder; } /** * 绑定ViewHolder * @param holder * @param position */ @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(mDatas.get(position)); } @Override public int getItemCount() { return mDatas.size(); } }第四步:添加分隔线类ItemDecoration示例代码地址: https://github.com/arjinmc/RecyclerViewDecoration/blob/master/RecyclerViewDecoration/app/src/main/java/com/arjinmc/recyclerviewdecoration/RecyclerViewItemDecoration.java
该ItemDecoration支持图片分隔,虚线分隔,其他简单 自定义的分隔线;
第五步:初始化RecyclerView并设置布局管理器和分隔线
private void initView() { mRecyclerView= (RecyclerView) findViewById(R.id.id_recycler_view); mAdapter=new RSimpleAdapter(this,mDatas); mRecyclerView.setAdapter(mAdapter); //设置RecyclerView的布局管理器 LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); mRecyclerView.setLayoutManager(linearLayoutManager); //设置RecyclerView的Item间的分割线 mRecyclerView.addItemDecoration(new RItemDecoration(RItemDecoration.MODE_HORIZONTAL,this,R.drawable.divider));//后面三个int类型的参数:白色宽,红色宽和最后一个貌似无效 }既然是初始那就先实现一般ListView;