初识----RecyclerView

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值