整体认知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;