Android RecyclerView(一)综合使用综述(Android 5.0 新特性)



RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版。

RecyclerView可加载列表样式的数据,类似ListView的加载效果,也可以加载九宫格样式(类似GridView效果)或者瀑布流样式数据,也就是说RecyclerView的可扩展性强,所以在使用时,必须要指定其显示的基本样式
        LinearLayoutManager 线性,显示数据格式为列表样式
        GridLayoutManager 九宫格样式
        StaggeredGridLayoutManager 瀑布流样式


1 RecyclerView 基本使用


添加依赖    

compile 'com.android.support:recyclerview-v7:25.0.0'
1.1 布局文件中创建使用
<android.support.v7.widget.RecyclerView
    android:id = "@+id/rv_list"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent" />
1.2 java代码中加载 设置列表模式
1.2.1 水平方向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android教程

//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
    list.add("智慧安卓 -- "+i);
}
//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getApplicationContext());
//设置
contentRecyclerView.setLayoutManager(linearLayoutManager);
//设置水平排列
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.2.2 竖直方向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android开发_02

//设置竖直排列
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.2.3 ListRecyclerAdapter配制

public class ListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    private List<String> mList;
    public ListRecyclerAdapter(Application application, List<String> list) {

        mContext = application;
        mList = list;

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view =View.inflate(mContext,R.layout.item,null);
        return new ListRecyclerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return mList.size();
    }
    private static class  ListRecyclerViewHolder extends RecyclerView.ViewHolder{

        public ListRecyclerViewHolder(View itemView) {
            super(itemView);
        }
    }
}
1.3 java代码中加载 设置九宫格模式
1.3.1 竖直方向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android开发_03

//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
    list.add("智慧安卓 -- "+i);
}

//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
//参数一 上下文对象
//参数二 列数
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getApplicationContext(),3);
//设置
contentRecyclerView.setLayoutManager(gridLayoutManager);
//设置水平排列
gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.3.2 横向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android教程_04

//设置竖直排列
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.3.3 ListRecyclerAdapter配制

如 1.2.3 中所写Adapter


1.5 java代码中加载 设置瀑布流模式

在这里使用到的条目布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/ll_root_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="1dp"
        android:background="#fff"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_item_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#5659fa"
            android:gravity="center"
            android:text="测试数据" />
    </RelativeLayout>

</RelativeLayout>
1.5.1 上下方向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android开发_05

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 水平方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
        StaggeredGridLayoutManager.VERTICAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);


需要注意的是,在这种效果中,显示的每一个Item的高度都不一样,这需要动态的设置Item的高度,否则不会出现这样的效果


//创建适配器 Adapter 与上述创建方式一致

//创建 Holder 
private static class CustomViewHolder extends RecyclerView.ViewHolder {

    public CustomViewHolder (View itemView) {
        super(itemView);

        RelativeLayout rootLinearLayout = itemView.findViewById(R.id.ll_root_view);
        //获取RelativeLayout对应的LayoutParams
        RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) rootLinearLayout.getLayoutParams();
        if (lp != null) {
            //重新设置LinearLayout的高度
            lp.height = (int) (200 + Math.random() * 600);
            rootLinearLayout.setLayoutParams(lp);
        }

    }

}


1.5.2 左右方向滑动

RecyclerView(一)综合使用综述(Android 5.0 新特性)_Android教程_06



RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 竖直方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
        StaggeredGridLayoutManager.HORIZONTAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);


需要注意的是,在这种效果中,显示的每一个Item的宽度都不一样,这需要动态的设置Item的宽度,否则不会出现这样的效果