Android仿淘宝切换商品列表效果
效果图:
可以看到商品展示的形式都是以列表的方式来展现,我用的是RecyclerView,这种列表并不复杂,配合Adapter数据适配器就实现了。
提出这个需求时,问了朋友,他说使用了两个Adapter、两个布局实现了这个效果。当时听了,我的内心是崩溃的。这样的设计方案在实际的App开发中是绝对不行的。如果单纯的为 了实现这个功能,那么可以理解。但是实际应用当中,数据都来自服务器,那么我们为了这么一个切换功能,还要去多请求一次服务器吗,多存储一些不必要的字段吗?显然这种设计方案是不行的。
RecyclerView强大的功能也支持了可以在不同布局之间的切换功能(LinearLayout,GridLyout,Stragged等等)。说到这,相信大家都想到了RecyclerView的布局管理器:LayoutManager。没错!就是它了
第一步:在adapter中重写getItemViewType()方法;添加setType(int type)方法
/**
* 点击切换布局的时候调用这个方法设置type
*
* @param type 商品排列的方式 0:网格;1:垂直列表排列
*/
public void setType(int type) {
this.type = type;
}
@Override
public int getItemViewType(int position) {
return type;
}
第二步:在onCreateViewHolder()方法中根据自己设置的布局类型切换item布局
@Override
public RecyclerView.ViewHolder onCreateMyViewHolder(ViewGroup parent, int viewType) {
if (viewType == MainConstant.Classify.SORT_TYPE_GRID) {
return new GoodsListViewHolder(inflater.inflate(R.layout.item_goods_list_grid, parent, false));
} else if (type == MainConstant.Classify.SORT_TYPE_LINEAR) {
return new GoodsListViewHolder(inflater.inflate(R.layout.item_goods_list, parent, false));
}
return null;
}
第三步:在点击切换布局图片时
if(goodsType==0){
showTypeIv.setImageResource(R.mipmap.good_type_grid);
//1:设置布局类型
adapter.setType(1);
//2:设置对应的布局管理器
recyclerView.setLayoutManager(gridLayoutManager);
//3:刷新adapter
adapter.notifyDataSetChanged();
goodsType=1;
}else if(goodsType==1){
showTypeIv.setImageResource(R.mipmap.good_type_linear);
adapter.setType(0);
recyclerView.setLayoutManager(linearLayoutManager);
adapter.notifyDataSetChanged();
goodsType=0;
}
到此列表的布局切换就全部搞定了。
评论