Android RecyclerView(入门篇)

前言

RecyclerView在Android当中也是相当重要的,RecylerView是support-v7包中的新组件,是一个强大的滑动组件,它可以很好替代ListView、GridView,并且实现比他们更加强大的功能,这里我们先从最基础的开始,慢慢带领大家进行深入。

官方文档

初步使用RecyclerView

1、添加所需要的依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'
或
compile 'com.android.support:recyclerview-v7:26.0.0'
接下来就是在布局中使用

2、三种布局方式

纵向布局(默认)、横向布局、表格布局、瀑布流

纵向布局: mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
横向布局:mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
表格布局:mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
瀑布流:mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));

总结:
纵向布局、横向布局、网格布局的item可以说相差微乎其微,关键区别在于setLayoutManager()的

纵向布局.jpg

横向列表.jpg

表格布局.jpg

瀑布流加载.jpg

3、设置分割线 默认分割线、自定义分割线

这里大家可以根据横向、纵向通过DividerItemDecoration.VERTICAL、DividerItemDecoration.HORIZONTAL来进行更换

默认分割线:mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
自定义分割线:mRecyclerView.addItemDecoration(new SpaceItemDecoation(3));
添加分割线.jpg

错误的横向分割线.jpg

错误纵向分割线.jpg

正确自定义分割线.jpg
这里是自定义的分割线
class SpaceItemDecoation extends RecyclerView.ItemDecoration {
        private int space;

        public SpaceItemDecoation(int space) {
            this.space = space;
        }

        @Override
        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
            super.getItemOffsets(outRect, view, parent, state);
            //如果不是第一个盒子设置一个居左和居下的边距
            outRect.left = space;
            outRect.bottom = space;
            //大部分的需求都是3个 因为第一个都是你设置个数的倍数,所以通过取余来将左边距设置为0
            if (parent.getChildLayoutPosition(view) % 3 == 0) {
                outRect.left = 0;
            }
        }
    }

4、添加、删除时动画

mRecyclerView.setItemAnimator(new DefaultItemAnimator());

在项目中的简单实用

1、拿到控件Id
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycleview);
2、设置布局管理器
//设置纵向默认排列
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
//设置横向排列
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
//设置表格布局排列
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
//设置瀑布流显示
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
3、设置分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
4、设置删除时动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
5、关联适配器
RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(getData(), this);
mRecyclerView.setAdapter(recyclerViewAdapter);
6、适配器
class RecyclerViewAdapter extends RecyclerView.Adapter {


    private List mList;
    private Context mContext;


    public RecyclerViewAdapter(List mList, Context mContext) {
        //大部分只有数据与上下文
        this.mList = mList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        /**
         * 主要负责把加载子项的布局
         * 将xml定义的布局实例化为view对象
         */
        View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, viewGroup, false);
        return new ContentViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        //主要负责绑定数据
        ((ContentViewHolder) holder).tvItem.setText(mList.get(position));
    }


    @Override
    public int getItemCount() {
        //返回集合的数量
        return mList.size();
    }

    class ContentViewHolder extends RecyclerView.ViewHolder {

        private final TextView tvItem;
        private final LinearLayout llLayout;

        public ContentViewHolder(@NonNull View itemView) {
            super(itemView);
            tvItem = (TextView) itemView.findViewById(R.id.tv_item);
            llLayout = (LinearLayout) itemView.findViewById(R.id.ll_layout);

        }
    }
}

最后

到此RecyclerView入门篇就到此结束,相信大家都对RecyclerView有了大体的认识,希望大家可以多多练习,融入自己的项目中,进行实践。
提前祝大家新年快乐!!
喜欢记得点赞或者关注我哦, 有意见或者建议评论区见~

android.jpg

你可能感兴趣的:(Android RecyclerView(入门篇))