介绍
RecyclerView用于在有限的窗口展现大量的数据,其实早已经有了类似的控件,如ListView、GridView,那么相比它们,RecyclerView有什么样优势呢?
RecyclerView标准化了ViewHolder,而且异常的灵活,可以轻松实现ListView实现不了的样式和功能,通过布局管理器LayoutManager可控制Item的布局方式,通过设置Item操作动画自定义Item添加和删除的动画,通过设置Item之间的间隔样式,自定义间隔。
可实现效果
设置布局管理器以控制Item的布局方式,横向、竖向以及瀑布流方式。
可设置Item操作的动画(删除或者添加等)
可设置Item的间隔样式(可绘制)
关于Item的点击和长按事件,需要用户自己去实现
使用
- 使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。
- 适配器继承RecyclerView.Adapter类,具体实现类似ListView的适配器,取决于数据信息以及展示的UI。
- 布局管理器用于确定RecyclerView中Item的展示方式以及决定何时复用已经不可见的Item,避免重复创建以及执行高成本的findViewById()方法
用法
示例
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
LinearLayoutManager mLayoutManager=new LinearLayoutManager(this);
// 设置布局管理器
mRecyclerView.setLayoutManager(mLayoutManager);
// 设置adapter
mRecyclerView.setAdapter(mAdapter);
// 设置Item添加和移除的动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
// 设置Item之间间隔样式
mRecyclerView.addItemDecoration(mDividerItemDecoration);
基本使用
首先需要在在 build.gradle 文件中引入 RecyclerView 类
compile 'com.android.support:recyclerview-v7:23.4.0'
Fragment代码
package com.demo.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.demo.R;
import com.demo.adapter.VideoRecyclerViewAdapter;
import com.demo.bean.VideoBean;
import java.util.ArrayList;
import java.util.List;
public class ListViewFragment extends Fragment{
public static ListViewFragment newInstance() {
return new ListViewFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_recycler_view, container, false);
initView(view);
return view;
}
private void initView(View view) {
RecyclerView recyclerView = view.findViewById(R.id.rv);
LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);// 设置布局管理器
DefaultItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView .setItemAnimator(itemAnimator);// 设置Item添加和移除的动画
itemAnimator.setSupportsChangeAnimations(false);
recyclerView.setAdapter(new VideoRecyclerViewAdapter(getVideoList(), getActivity()));
}
public List<VideoBean> getVideoList() {
List<VideoBean> videoList = new ArrayList<>();
//...添加数据
return videoList;
}
}
R.layout.activity_recycler_view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
RecyclerView适配器Adapter代码
package com.demo.adapter;
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.LinearLayout;
import android.widget.TextView;
import com.bumptech