欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RecyclerView的简单使用

程序员文章站 2022-06-05 12:41:40
...

RecycleView简介

官方对RecyclerView的描述是

A flexible view for providing a limited window into a large data set.

RecycleView是在有限的窗口中大量显示数据集的灵活view
RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版,个人觉得可以替代ListView

可以实现
- ListView的功能(包括横向)
- GridView的功能
- 横向ScrollView
- 瀑布流
- 方便添加animation

RecyclerView高度解耦,随意定制。它提供的LayoutManager,ItemDecoration,ItemAnimator可以让开发者自定义奇特的效果,
但是RecyclerView的点击方法是需要自己实现的

基本的使用方法

gradle导包

 compile 'com.android.support:recyclerview-v7:23.4.0'

在layout布局文件中加入

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

OnCreate中几个关键函数

//设置布局管理器,必须
mRecyclerView.setLayoutManager(layout);
//设置RecycleView的Adapter,必须
mRecyclerView.setAdapter(adapter)
//设置分割线,非必须
mRecyclerView.addItemDecoration(ItemDecoration);
//设置item的增删动画,非必须
mRecyclerView.setItemAnimator(animator);

新建布局recycleview_item,以TextView为根节点

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recycle_textview"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:text="TEXT"
    android:textSize="20sp"/>

新建一个RecyclerView.Adapter适配器MyRecycleViewAdapter

package edu.fjnu.birdie.demo;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by edge0 on 2017/5/17.
 */
public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyViewHolder> {

    private Context mContext;
    private List<String> mList;

    public MyRecycleViewAdapter(Context context, List<String> list) {
        this.mContext = context;
        this.mList = list;
    }

    @Override
    public MyRecycleViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //此处动态加载ViewHolder的布局文件并返回holder
        View view = LayoutInflater.from(mContext).inflate(R.layout.recycleview_item, parent, false);
        MyViewHolder mHolder = new MyViewHolder(view);
        return mHolder;
    }

    @Override
    public void onBindViewHolder(MyRecycleViewAdapter.MyViewHolder holder, int position) {
        //此处设置Item中view的数据
        holder.mTextView.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        //生成的item的数量
        return mList.size();
    }

    //Item的ViewHolder
    // item内部布局控件的id绑定
    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView mTextView;
        public MyViewHolder(View itemView) {
            super(itemView);
            mTextView = (TextView) itemView.findViewById(R.id.recycle_textview);
        }
    }
}

Activity中OnCreate中加入

RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycle_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
initData();//简单的初始化数据

//实例化并传输数据给adapter
MyRecycleViewAdapter mAdapter = new MyRecycleViewAdapter(getApplicationContext(), list);
mRecyclerView.setAdapter(mAdapter);

RecyclerView的简单使用

一些其他设置

RecyclerView的点击事件

一开始说到RecyclerView需要我们自己实现点击事件
因为他没有没有提供类似setOnItemClickListener()这样的注册监听器方法
所以我们自己给子项view注册响应事件

我们只需要在Adapter的onBindViewHolder方法里添加

public void onBindViewHolder(MyRecycleViewAdapter.MyViewHolder holder,final int position) {

        holder.mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, "item"+position,Toast.LENGTH_SHORT).show();
            }
        });
    }

RecyclerView的简单使用

RecycleView的强大之处也在这里,就算是ViewHolder里的View多层嵌套了几个view都可以轻松的实现点击事件

Item间分割线
  1. 只要在item的layout里加上
 android:layout_marginTop="3dp"

2.使用ItemDecoration
详细的使用方法参考这篇文章:
RecyclerView之ItemDecoration由浅入深
这里就不加赘述,这篇文章写的非常清楚
主要就是对列表的分割线进行自定义,功能非常丰富

Item显示方式

GridLayout

只需要将 layoutManager

LinearLayoutManager layoutManager = new LinearLayoutManager(this);

改为

GridLayoutManager layoutManager = new GridLayoutManager(this,3);

就可以实现3列的网格布局

RecyclerView的简单使用
瀑布流
同上 修改layoutManager为StaggeredGrid

StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));

以上就是RecyclerView的简单使用
RecyclerView还有很多其他的用法
比如
- 高级效果 波纹点击

  • 添加 删除时动画

  • 与某些View结合使用

  • 滑动监听addOnScrollListener 可实现下拉刷新等

  • ItemTouchHelper实现item删除,互相拉动
    有兴趣的同学可以自己去查询资料

相关标签: recyclerview

上一篇: Glide教程1-4

下一篇: 冒泡排序