Android控件——RecyclerView系列一(基本使用)

1. RecyclerView介绍

从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。它是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作。 如果您有数据集合,其中的元素将因用户操作或网络事件而在运行时发生改变,请使用 RecyclerView 。

在ListView中 改变列表某一个item数据,然后刷新列表,会回到最顶部,而RecyclerView可以保持原来滑动的位置不变。

要实现一个RecyclerView,会接触到它的几个小伙伴,其中1、2是必须的。剩下的3、4、5三项,可以让RecyclerView更好看、效果更好。

  1. 想要控制其Item们的排列方式,使用布局管理器LayoutManager
  2. 如果要创建一个适配器,请使用RecyclerView.Adapter
  3. 想要控制Item间的间隔,请使用RecyclerView.ItemDecoration
  4. 想要控制Item增删的动画,请使用RecyclerView.ItemAnimator
  5. CardView扩展FrameLayout类并能够显示卡片内信息,这些信息在整个平台中拥有一致的呈现方式。CardView小部件可拥有阴影和圆角。

上述RecyclerView的功能对应的使用代码是:

mRecyclerView = findView(R.id.id_recyclerview);
//设置布局管理器
mRecyclerView.setLayoutManager(layout);
//设置adapter
mRecyclerView.setAdapter(adapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(
                getActivity(), DividerItemDecoration.HORIZONTAL_LIST));

如果要使用RecyclerView小部件,必须指定一个Adapter和一个LayoutManager
在这里插入图片描述

1.1 RecyclerView使用流程

RecyclerView定义在support库当中,想要使用该控件,需要在项目的build.gradle中添加相应的依赖库。在app/build.gradle文件,在dependencies闭包中添加:

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

添加完之后点击Sync Now进行同步(版本根据实际情况调整)

在使用RecyclerView之前,先简单介绍一下其适配器
RecyclerView.Adaper

1.2 RecyclerView.Adapter

RecyclerView.Adaper是一个抽象类,并支持泛型:

public abstract static class Adapter<VH extends RecyclerView.ViewHolder> {
   
   ...
}

定义一个MyRecyclerViewAdapter继承RecyclerView.Adaper,这时候需要重写三个方法。一般会先定义一个Holder继承RecycelrView.ViewHolder,之后直接在MyRecyclerViewAdapter上,指定泛型就是RecyclerHolder。

三个必须要重写的方法为:

  • public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
  • public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
  • public int getItemCount()
    在指定泛型之后,相应的方法一与方法二会根据泛型改变

在前述的基本用法中,定义了一个叫ViewHolder的内部类,同样是继承RecyclerView的ViewHolder class,这个子类构造器必须调用父类构造器。然后可以在ViewHolder内定义每个列表上的视图控件,并在之后的onCreateViewHolder中初始化这些视图控件

  • onCreateViewHolder(ViewGroup parent, int viewType)
@Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
   
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

这个方法就是用来创建出一个新的ViewHolder,可以根据需求的itemType,创建出多个ViewHolder。创建多个itemType时,需要getItemViewType(int position)方法配合

使用inflate作为ViewHolder的layout,并**将layout中的视图控件与ViewHolder中元件属性绑定**。

  • onBindViewHolder(RecyclerHolder holder, int position)
@Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
   
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }

hold是在onCreateViewHolder中创建的ViewHolder,position是item对应的数据列表中数据源集合的position。在这个方法中**设置ViewHolder中视图控件的数据与属性**。

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

这个方法的返回值,便是RecyclerView中实际item的数量。有些情况下,当增加了HeaderView或者FooterView后,需要注意考虑这个返回值

简单示例

  • 在xml文件中添加RecyclerView控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值