1.使用recyclerview实现网格和列表切换,先看效果图
2.首先是两个不同item的布局,这没什么,各位可以替换为自己的布局
分别叫item_taobao_hot_goods和item_taobao_hot_goods_list
3.recyclerview适配器(关键代码),主要是通过重写getItemViewType方法。
private int TYPE_1 = 1;//网格 private int TYPE_2 = 2;//列表 private boolean isTable = true;//在activity中设值 //对activity暴露方法改变布局 public void switchStyle(boolean isTable) { this.isTable = isTable; // notifyItemRangeChanged(0,this.beanList.size());如果只是改变布局,像我这种,无需调用该方法。(如果需要改变数据,需要在onBInd方法中通过type修改数据) }
@NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) { int itemViewType = getItemViewType(position); View view = null; if (itemViewType == TYPE_1) { view = inflater.inflate(R.layout.item_taobao_hot_goods, viewGroup, false); } else { view = inflater.inflate(R.layout.item_taobao_hot_goods_list, viewGroup, false); } ViewHolder viewHolder = new ViewHolder(view); return viewHolder; }
@Override public int getItemViewType(int position) { if (isTable) { return TYPE_1; } else { return TYPE_2; } }
4.acitvity代码
RecyclerView recyclerView;
private GridLayoutManager gridLayoutManager;
private RecyclerViewAdapter adapter;
gridLayoutManager = new GridLayoutManager(mContext, 2);//设置初始布局为网格,即两列 recyclerView.setLayoutManager(gridLayoutManager);
//点击事件
gridLayoutManager.setSpanCount(1);//设为1列,即列表
adpater.switchStyle(false);
gridLayoutManager.setSpanCount(2);//设为2列,即网格
adpater.switchStyle(false);