RecyclerView网格视图

RecyclerView支持列表布局,网格布局和瀑布式布局,之前接触的都是列表布局,就是只有一列显示。其实RecyclerView的网格布局也能实现列表布局,就是在设置网格的列数的时候设置为一列,而且设置网格式布局也十分简单,几句代码就可以实现。

一、 写一个RecyclerView

RecyclerView写完后,在实例化的时候设置布局管理器设置为网格布局,之前写的是线性布局。

public void initRecyclerView(View view){
        recyclerView = view.findViewById (R.id.create_select_recycler_view);
        createAdapter = new CreateAdapter (getActivity (),list);
        recyclerView.setLayoutManager (new GridLayoutManager (getActivity (),3,GridLayoutManager.VERTICAL,false));
        recyclerView.setAdapter (createAdapter);
        recyclerView.setItemAnimator (new DefaultItemAnimator ());  
    }

重点就是这一行代码

recyclerView.setLayoutManager (new GridLayoutManager (getActivity (),3,GridLayoutManager.VERTICAL,false));

这句代码传入了一个参数用于设置要显示的列数,这个参数与适配器里面的spansize有关。

二、 在适配器里面复写onAttachedToRecyclerView方法

@Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onAttachedToRecyclerView (recyclerView);
        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager ();
        if(manager instanceof GridLayoutManager){
            GridLayoutManager gridLayoutManager = (GridLayoutManager)manager;
            gridLayoutManager.setSpanSizeLookup (new GridLayoutManager.SpanSizeLookup () {
                @Override
                public int getSpanSize(int position) {
                    return 1;
                }
            });
        }
    }

在实例化的时候传入了一个参数进行要显示的列数设置,比如设置的数值为6,在getSpanSize方法里面返回的数值决定了显示的列数,如果返回1,显示的是6列item;如果返回的是2,显示的是3列;同理如果返回6,则最后只能显示1列。
这个设置可以在同一个RecyclerView里面显示不同数量的item。

三、 实现效果

网格布局

你可能感兴趣的:(RecyclerView网格视图)