仿淘宝、京东多重商品属性组合Sku标签
2016-09-06 13:12
344 查看
一、概述
首先声明,在这个Demo中我用到了zhy大神的自定义控件Android TagFlowLayout完全解析 一款针对Tag的布局,我只是在他的基础上对源码进行了一些修改,可以运用到我的项目中。好了,现在话不多说,大家先看下效果:
这个效果就是我现在APP里的效果,在平时看见大家好像这方面问得比较多,所以我就写成了一个Demo,希望对大家有帮助。
这个Demo可满足:
1、商品属性无上限(多少个都可以)
2、实时刷新不可选择属性
3、布局完全可自定义。(文字、颜色、框体)
二、使用
(1)前面也说了,是在zhy大神的自定义控件的基础上,所以我们要先接入这个项目dependencies {
compile ‘com.zhy:flowlayout-lib:1.0.3’
}
(2)在添加完依懒后把Demo中的FlowLayout、TagFlowLayout、TagAdapter复制到项目中,前面说过我进行了一些修改。
Attribute是商品属性的Base类,可自定义,里面记录了当前属性的集合和不可选属性的集合。
(3)布局中使用
用的是已修改过在项目中的Tag.
<com.example.itzwh.shoppingattribute.TagFlowLayout android:id="@+id/tf_color" android:layout_width="match_parent" android:layout_height="wrap_content" zhy:gravity="@string/gravity_left" zhy:max_select="1"/>
(3)代码中:
前期数据处理(拿到各个属性的商品数据集合和不可选的商品属性集合
String[] split = Sku.split(":"); String splitsColor = split[0]; String splitsSize = split[1]; ColorAtt.FailureAliasName.clear(); for (int i = 0; i < mColorDate.size(); i++) { if (splitsColor.equals(mColorDate.get(i))) { DefaultColor = i; Color = DefaultColor; } //拿到颜色属性不可选的属性集合 String sku = mColorDate.get(i) + ":" + splitsSize; for (int j = 0; j < mFailureSkuDate.size(); j++) { if (sku.equals(mFailureSkuDate.get(j))) { ColorAtt.FailureAliasName.add(mColorDate.get(i)); } } } SizeAtt.FailureAliasName.clear(); for (int i = 0; i < mSizeDate.size(); i++) { if (splitsSize.equals(mSizeDate.get(i))) { DefaultSize = i; Size = DefaultSize; } //拿到大小属性不可选的属性集合 String sku = splitsColor + ":" + mSizeDate.get(i); for (int j = 0; j < mFailureSkuDate.size(); j++) { if (sku.equals(mFailureSkuDate.get(j))) { SizeAtt.FailureAliasName.add(mSizeDate.get(i)); } } })
属性点击事件
//颜色属性标签点击事件
mTfColor.setOnTagClickListener(new TagFlowLayout.OnTagClickListener() { boolean is; @Override public boolean onTagClick(View view, int position, FlowLayout parent) { is = false; //从Base类中拿到不可点击的属性名称进行比较 List<String> st = ColorAtt.getFailureAliasName(); for (int i = 0; i < st.size(); i++) { if (st.get(i).equals(mColorDate.get(position))) { is = true; } } //如是不可点击就进接return 这样就形成了不可点击的假像,达到了我们的目的 if (is) { return true; } if (position == DefaultColor) { DefaultColor = -1; ColorStr = ""; SizeAtt.FailureAliasName.clear(); TagAdapNotify(mSizeAdapter, DefaultSize); return true; } else { DefaultColor = position; ColorStr = mColorDate.get(position); } SizeAtt.FailureAliasName.clear(); for (int i = 0; i < mSizeDate.size(); i++) { String sku = ColorStr + ":" + mSizeDate.get(i); for (int j = 0; j < mFailureSkuDate.size(); j++) { if (sku.equals(mFailureSkuDate.get(j))) { SizeAtt.FailureAliasName.add(mSizeDate.get(i)); } } } TagAdapNotify(mSizeAdapter, DefaultSize); return true; } });
Tag Adpater 每个属性控件加载数据和布局
class mTagAdapter extends TagAdapter<String> { private TextView tv; public mTagAdapter(Attribute ab) { super(ab); } @Override public View getView(FlowLayout parent, int position, Attribute t) { boolean is = false; //两个布局,一个是可点击的布局,一个是不可点击的布局 List<String> st = t.FailureAliasName; if (st != null) { for (int i = 0; i < st.size(); i++) { if (st.get(i).equals(t.aliasName.get(position))) { is = true; } } } if (!is) { tv = (TextView) mInflater.inflate(R.layout.popupwindow_tv, parent, false); tv.setText(t.aliasName.get(position)); } else { tv = (TextView) mInflater.inflate(R.layout.popupwindow_tv1, parent, false); tv.setText(t.aliasName.get(position)); } return tv; } }
说了这么多大家可能在想这个2货写的啥呢,其实我也想说上面那些代码分开看真的我都看不懂,哈哈。
所以我还是建议大家下载Demo来看,玩一下, 就知道怎么玩了。
本文Demo
大家有什么意见和建议可以在下面提示来哦。
相关文章推荐
- Android 仿淘宝商品属性标签页
- JQ或JS仿京东淘宝属性规格SKU样式
- Android开发—电商系列】(二):仿淘宝商品属性标签页
- 相关淘宝的名词解释,SPU 关键属性 销售属性 商品属性 非关键属性 SKU AppKey 等
- jquery特效 商品SKU属性规格选择实时联动
- 淘宝API读取商品属性
- javascript实现 京东淘宝等商城的商品图片大图预览功能
- Android高仿京东淘宝商品列表布局切换效果
- [原] 淘宝SKU组合查询算法实现
- 笛卡尔积-可以用来组合商品SKU
- android商品属性选择标签控件,可实现自动换行
- SiteMate标签的三个属性组合:实现对节点及相关节点、内容列表及内容的各种展现
- BeautifulSoup 使用select方法详解(通过标签名,类名, id,组合,属性查找)
- 【Android开发—电商系列】(二):仿淘宝商品属性标签页
- 商品标签例子——CSS3 transform 属性
- 浅谈淘宝类目属性体系:商品搜索背后的逻辑架构
- 安卓 跳转淘宝、京东app,并打开商品详情页
- jquery特效 商品SKU属性规格选择实时联动
- Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解
- 仿淘宝、京东拖拽商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost)