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'

接下来就是在布局中使用
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycleview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

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()的

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

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

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

这里是自定义的分割线
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<RecyclerView.ViewHolder> {


    private List<String> mList;
    private Context mContext;


    public RecyclerViewAdapter(List<String> 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有了大体的认识,希望大家可以多多练习,融入自己的项目中,进行实践。

文末福利

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集

在这里插入图片描述
二、源码解析合集
在这里插入图片描述

三、开源框架合集
在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

猜你喜欢

转载自blog.csdn.net/YoungOne2333/article/details/129769275