RecyclerView尝试使用

本文详细介绍了RecyclerView控件的优势,包括低耦合高类聚的设计理念,以及如何通过设置LayoutManager、ItemDecoration和ItemAnimator实现丰富的视觉效果。从引入依赖到自定义ViewHolder,再到适配器的实现,提供了完整的使用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RecyclerView是support:recyclerview-v7中提供的控件,最低兼容到android 3.0版本。

官方介绍RecyclerView为在有限的窗口展现大量数据的控件。拥有类似功能的控件有ListView、GridView以及被Google遗弃的Gallery等,为毛已经有了它们,Google还推出RecyclerView呢,那就要说说RecyclerView所具有的一些优势了。

那RecyclerView到底有啥优势呢?总结起来六颗字:低耦合高类聚。RecyclerView已经标准化ViewHolder,我们自定义的ViewHoler需要继承 RecyclerView.ViewHolder,然后在构造方法中初始化控件,后面会有具体介绍。通过设置不同的LayoutManager,以及结合ItemDecoration , ItemAnimator,ItemTouchHelper,可以实现非常炫酷的效果,这些是ListView等控件难以企及的。

首先第一步,用这个当然是先要倒入依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'

然后在xml中写自己的布局

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycyle"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

然后呢就开始操作了,在写适配器之前还要设置几个属性

第一个是布局样式(线性,网格,瀑布等)

							LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
                            manager.setOrientation(LinearLayoutManager.VERTICAL);
                            recycyle.setLayoutManager(manager);

这里以线性为例,还有GridLayoutManager和StaggeredGridLayoutManager

然后是给它添加横线Decoration

DividerItemDecoration decoration = new DividerItemDecoration(MainActivity.this, DividerItemDecoration.VERTICAL);
                            decoration.setDrawable(getDrawable(R.drawable.item_divider));
                            recycyle.addItemDecoration(decoration);

然后添加动画

DefaultItemAnimator animator = new DefaultItemAnimator();
                            animator.setRemoveDuration(200);
                            animator.setAddDuration(200);
                            recycyle.setItemAnimator(animator);

到这里设置的就差不多了,最后就是大工程

适配器

了,写法上稍有不同,这次是要重写三个方法,

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RVolder> {
    Context context;
    ArrayList<Food> arr;
    jiekou jie;
    public MyAdapter(Context context, ArrayList<Food> arr) {
        this.context = context;
        this.arr = arr;
    }
    public void setJie(jiekou jie){
        this.jie = jie;
    }

    public void addlist(ArrayList<Food> xxx){

        notifyDataSetChanged();
    }

    public void remove(int index){
        arr.remove(index);
        notifyItemRemoved(index);
        notifyItemRangeChanged(index,arr.size());
    }
    @Override
    public RVolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        return new RVolder(LayoutInflater.from(context).inflate(R.layout.item_vh,viewGroup,false));
    }

    @Override
    public void onBindViewHolder(@NonNull RVolder rVolder,final int i) {
        rVolder.title.setText(arr.get(i).title);
        rVolder.food_str.setText(arr.get(i).food_str);
        Glide.with(context).load(arr.get(i).pic).into(rVolder.pic);
        Log.i("###", "onBindViewHolder: 我到这里了");
    }

    @Override
    public int getItemCount() {
        return arr.size();
    }

    class RVolder extends RecyclerView.ViewHolder{

        TextView title;
        TextView food_str;
        ImageView pic;
        public RVolder(View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
            food_str = itemView.findViewById(R.id.food_str);
            pic = itemView.findViewById(R.id.pic);
        }
    }

}

在这里主要是要注意自己写的ViewHolder要继承RecyclerView.ViewHolder
然后给他返回去,才能进行获取布局和添加事件,数据源自己封装好,动手试试吧

INTERESTING!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值