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。