RecyclerView基本用法和资料总结

Learning By Doing

一个Demo掌握RecyclerView基本用法

前言

由于RecyclerView已经出来很久了,关于RecyclerView的文章网上也有很多,所以这篇文章只是作为一个基本用法的总结 + 常见功能的参考链接,可以理解为一篇查阅/总结的文章。

首先总结一下最基本的用法。

RecyclerView使用

使用RecyclerView的步骤

  • 添加RecyclerView依赖库(gradle build file)
  • 定义Model类
  • 在XML添加RecyclerView
  • 创建XML布局文件,用于展示item
  • 创建RecyclerView.Adapter和ViewHolder
  • 绑定adapter和数据到RecyclerView

添加RecyclerView依赖库

在build.gradle中加入依赖:

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

定义Model类

/**
 * author : BlueLzy
 * e-mail : [email protected]
 * date   : 2018/09/10 22:11
 * desc   :
 */
public class Contact {
    private String mName;
    private boolean mOnline;

    public Contact(String name, boolean online) {
        mName = name;
        mOnline = online;
    }

    public String getName() {
        return mName;
    }

    public boolean isOnline() {
        return mOnline;
    }

    private static int lastContactId = 0;

    public static ArrayList createContactsList(int numContacts) {
        ArrayList contacts = new ArrayList();

        for (int i = 1; i <= numContacts; i++) {
            contacts.add(new Contact("Person " + ++lastContactId, i <= numContacts / 2));
        }
        return contacts;
    }
}

在activity添加RecyclerView

我们新建一个layout文件:


<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvContacts"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


android.support.constraint.ConstraintLayout>

创建XML布局文件,用于展示item

再创建一个layout文件:


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    >

    <TextView
        android:id="@+id/contact_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />

    <Button
        android:id="@+id/message_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:textSize="10sp"
        />
LinearLayout>

创建adapter和viewholder

创建ContactsAdapter类:

onCreateViewHolder:一般用于初始化布局文件和viewholder

onBindViewHolder:一般用于初始化item布局中的控件

/**
 * author : BlueLzy
 * e-mail : [email protected]
 * date   : 2018/09/10 22:16
 * desc   :
 */
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder> {

    private List contacts;

    public ContactsAdapter(List contacts){
        this.contacts = contacts;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View contactView = inflater.inflate(R.layout.item_recyclerview, parent, false);

        ViewHolder viewHolder = new ViewHolder(contactView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Contact contact = contacts.get(position);

        TextView textView = holder.name;
        textView.setText(contact.getName());
        Button button = holder.message;
        button.setText(contact.isOnline() ? "Message" : "Offline");
        button.setEnabled(contact.isOnline());
    }

在activity绑定adapter和data

在activity的onCreate()中加入以下代码:

 RecyclerView rvContacts = findViewById(R.id.rvContacts);

        contacts = Contact.createContactsList(20);
        ContactsAdapter adapter = new ContactsAdapter(contacts);
        rvContacts.setLayoutManager(new LinearLayoutManager(this));
        rvContacts.setAdapter(adapter);

        SnapHelper snapHelper = new LinearSnapHelper();
        snapHelper.attachToRecyclerView(rvContacts);

compile & run project

运行程序,看一下我们的成果:

可以看到,根据Contact.createContactsList(20)方法,创建了20个item,并且成功的按照item的布局展示出来,这就是RecylerView最基本的用法了。over~

步骤其实特别简单:

添加依赖,XML加入RecyclerView,编写item布局,编写Adapter和ViewHolder,创建RecyclerView,绑定Adapter

最后别忘了 运行程序

over~

第三方库

由于RecyclerView还有许多有用的特性,我们可以利用它来做很多有趣的事情,所以我也收集了一些资料,供大家参考。

  • 让item在滚动后居中显示的库: Snap to Center Effect

  • 给Recyclerview加上各种动画:recyclerview-animators

  • 万能adapter:BaseRecyclerViewAdapterHelper

  • tablayout:RecyclerTabLayout

文章/博客

中文:

  • Android RecyclerView 使用完全解析 体验艺术般的控件
  • 深入浅出 RecyclerView

英文:

  • Android Developer - Create a List with RecyclerView
  • RecyclerView:Android-Developer-Traning

基本上常见的用法和原理的解析都在这里面了,有特定需求的可以上Github找一下第三方库,看一下里面的源码,了解原理之后,其实自己也能实现各种炫酷的效果~


你可能感兴趣的:(Android)