Android选择颜色,尺码联动
最近项目遇到一个功能,类似淘宝的购物颜色,尺码联动。
说重点吧,感受比较深的是数据驱动吧,类似前端的Vue.js。
先看一下适配器数据模型吧
public class DemoModel implements Serializable{private String id;private String content;private boolean isSelect;//是否选中private List<String> mlist;//对应关联private boolean isEnableClick;//是否可点public List<String> getMlist() {return mlist;}public void setMlist(List<String> mlist) {this.mlist = mlist;}public boolean isSelect() {return isSelect;}public void setSelect(boolean select) {isSelect = select;}public boolean isEnableClick() {return isEnableClick;}public void setEnableClick(boolean enableClick) {isEnableClick = enableClick;}public DemoModel(String id, String content,boolean isSelect,boolean isEnableClick,List<String> mlist) {super();this.id = id;this.content = content;this.isEnableClick =isEnableClick;this.isSelect =isSelect;this.mlist = mlist;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}
通过修改状态值来刷新适配器notifyDataSetChanged();
适配器类
/*** Created by xulei on 2017/7/18.*/public class GoodsPopupGridAdapter extends SingleAdapter{private Activity activity;private List<DemoModel> demodels;private LayoutInflater inflater;private int pos;private int lastPosition = -1;//记录上一次选中的图片位置,-1表示未选中private Vector<Boolean> vector = new Vector<Boolean>(); // 定义一个向量作为选中与否容器public GoodsPopupGridAdapter(Activity activity , List<DemoModel> demodels,int L){super(activity);this.activity = activity;this.demodels = demodels;pos = L;inflater = LayoutInflater.from(activity);for (int i = 0; i < demodels.size(); i++) {vector.add(false);}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn demodels.size();}@Overrideprotected demodelHolder createViewHolder(View root) {// TODO Auto-generated method stubdemodelHolder hold = new demodelHolder();hold.tv_demodel = (Button) root.findViewById(R.id.adapter_item_btncheck);return hold;}@Overrideprotected void fillView(View root, Object item, ViewHolder holder,final int position) {// TODO Auto-generated method stubfinal demodelHolder hold = (demodelHolder)holder;hold.demodel = demodels.get(position);if(!"".equals(demodels.get(position).getContent())){hold.tv_demodel.setText(demodels.get(position).getContent());}if(demodels.get(position).isEnableClick() == true){hold.tv_demodel.setEnabled(true);if(demodels.get(position).isSelect() == true){hold.tv_demodel.setBackgroundResource(R.drawable.bg_shape_blue);hold.tv_demodel.setTextColor(activity.getResources().getColor(R.color.white));//setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.bg_shape_blue));}else{hold.tv_demodel.setBackgroundResource(R.drawable.bg_shape_whitesmoke);hold.tv_demodel.setTextColor(activity.getResources().getColor(R.color.text_black));//setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.bg_shape_grey));}}else {hold.tv_demodel.setEnabled(false);hold.tv_demodel.setTextColor(activity.getResources().getColor(R.color.lightgray));hold.tv_demodel.setBackgroundResource(R.drawable.bg_shape_whitesmoke);return;}hold.tv_demodel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {changeState(position,pos);if (pos == 1){if (demodels.get(position).isSelect()){int i = 0;if(GoodsDetailActivity.Sizedemodels.size()==1){GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(true);}else {for(DemoModel mdModel :GoodsDetailActivity.Sizedemodels){if(i>=GoodsDetailActivity.Sizedemodels.size()) return;if(demodels.get(position).getMlist().contains(mdModel.getContent())){GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(true);}else {GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(false);}/* for(String str : demodels.get(position).getMlist()){if(str.equals(mdModel.getContent())){GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(true);}else {GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(false);}}*/i++;}}}else {for(int i=0;i<GoodsDetailActivity.Sizedemodels.size();i++){GoodsDetailActivity.Sizedemodels.get(i).setEnableClick(true);}}Log.i("","x---"+ GoodsDetailActivity.Sizedemodels.toString());GoodsDetailActivity.adapter_size.notifyDataSetChanged();}else if(pos ==2){if (demodels.get(position).isSelect()){int i = 0;if(GoodsDetailActivity.Colourdemodels.size()==1){GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(true);}else {for(DemoModel mdModel :GoodsDetailActivity.Colourdemodels){if(i>=GoodsDetailActivity.Colourdemodels.size()) return;if(demodels.get(position).getMlist().contains(mdModel.getContent())){GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(true);}else {GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(false);}/*for(String str : demodels.get(position).getMlist()){if(str.equals(mdModel.getContent())){GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(true);}else {GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(false);}}*/i++;}}}else {for(int i=0;i<GoodsDetailActivity.Colourdemodels.size();i++){GoodsDetailActivity.Colourdemodels.get(i).setEnableClick(true);}}Log.i("","x---"+ GoodsDetailActivity.Colourdemodels.toString());GoodsDetailActivity.adapter_color.notifyDataSetChanged();}}});}@Overrideprotected int getItemViewId() {// TODO Auto-generated method stubreturn R.layout.adapter_pop_btncheck;}public class demodelHolder extends ViewHolder{private TextView tv_demodel;private DemoModel demodel;}/*** 修改选中时的状态* @param position*/public void changeState(int position,int pos){if(pos == 1){if(GoodsDetailActivity.Colourdemodels.get(position).isSelect()) {ModifySelectInfo(pos);GoodsDetailActivity.Colourdemodels.get(position).setSelect(false);}else {ModifySelectInfo(pos);GoodsDetailActivity.Colourdemodels.get(position).setSelect(true);}GoodsDetailActivity.adapter_color.notifyDataSetChanged();}else {if(GoodsDetailActivity.Sizedemodels.get(position).isSelect()) {ModifySelectInfo(pos);GoodsDetailActivity.Sizedemodels.get(position).setSelect(false);}else {ModifySelectInfo(pos);GoodsDetailActivity.Sizedemodels.get(position).setSelect(true);}Log.i("","x---"+ GoodsDetailActivity.Sizedemodels.toString());GoodsDetailActivity.adapter_size.notifyDataSetChanged();}}private void ModifySelectInfo(int pos){if(pos==1){for(int i=0;i<GoodsDetailActivity.Colourdemodels.size();i++){GoodsDetailActivity.Colourdemodels.get(i).setSelect(false);}}else {for(int i=0;i<GoodsDetailActivity.Sizedemodels.size();i++){GoodsDetailActivity.Sizedemodels.get(i).setSelect(false);}}}private void ModifyEnableInfo(){for(int i=0;i<demodels.size();i++){demodels.get(i).setEnableClick(true);}}public int getLastPositiont(){return lastPosition;}
}
其中fillview其实类似getView方法,写在getview方法里即可。代码太多就不一一贴了。
Android选择颜色,尺码联动相关推荐
- Android 购物选择颜色(尺码)实现(一)
好久都没写博客了,一直忙于公司的项目,这几天有时间所以写点东西,和大家相互学习一下!写的不好的话,还望见谅! 在公司做的项目一直是有关手机购物方面的,所以就会碰到购买东西时,需要选择商品的颜色.尺码. ...
- 仿天猫 购物车(Android studio 仿天猫 详情页面 添加购物车选择 颜色 尺寸demo)
这是我第一次编写博客,有不好的地方请发邮件或留言告知. 注*请勿转载-转载需博主同意 1.首先就是设计页面了–先效果图 2.现在开始看代码,没有啥好说的 这是布局文件 MainActivity 里面的 ...
- android用sku算法仿淘宝选择颜色分类弹框。
当规格超出边界会自动换行,点击规格会根据算法判断关联规格,无则灰显,全部选中后则变化图片.代码是kotlin和java混合. 效果如下,当一行显示不下所有规格时,会自动换行.用的夜神模拟器,分辨率有点 ...
- android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程
易采站长站为您分析Android中颜色选择器和改变字体颜色的实例教程,其中改变字体颜色用到了ColorPicker颜色选择器,需要的朋友可以参考下 1.构建一张七彩图: 我们经常看到这种样子的颜色选择 ...
- Android上一种用于选择颜色的控件(颜色选择器)
目录 引言 核心代码 控件整体代码 demo 引言 最近在做一个项目时其中有一个需求–自定义灯光颜色.要求通过手机端控制灯光颜色,手机端预设五种颜色及用户可自定义颜色.在百度上搜索找到一个开源的色环控 ...
- Android 选择商品属性sku
Android 选择商品属性sku 最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问 ...
- 服装盘点机在服装行业颜色尺码仓库条码高效管理中的应用
服装行业的商品管理的特点是需要管理颜色和尺码 具体逻辑就是: 什么商品,什么颜色,什么尺码,入库多少个? 什么商品,什么颜色,什么尺码,出库多少个? 什么商品,什么颜色,什么尺码,还有库存多少个? 如 ...
- Android状态栏颜色修改
android状态栏颜色修改 状态栏颜色的修改在4.4和5.x环境下分别有不同的方式,低于4.4以下是不能修改的. 5.x环境下 方式一,状态栏将显示为纯净的颜色,没有渐变效果 [java] view ...
- java 选择 颜色的控件_JavaFX颜色选择器(ColorPicker)
颜色选择器控件允许用户从可用的颜色范围中选择颜色,或通过指定RGB或HSB组合设置其他颜色.JavaFX ColorPicker控件具有颜色选择器,调色板和自定义颜色对话框窗口. 创建ColorPic ...
- UITableView单元格选择颜色?
本文翻译自:UITableView Cell selected Color? I have created a custom UITableViewCell . 我创建了一个自定义UITableVie ...
最新文章
- 计算机专业期末考试是编程序,计算机专业技能期末考试题
- 烂大街的Spring循环依赖该如何回答?
- 密码篇——对称加密—DES
- 全球与中国终端天线市场发展战略与运营规划分析报告
- Vue-使用webpack+vue-cli搭建项目
- 放弃Venn-Upset-花瓣图,在线拥抱二分网络
- abaqus分析用户手册单元卷_ABAQUS与你我的约定
- 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?|文末送书
- leadshop开源商城系统
- 发黄图再截图举报!这个社交软件运营合伙人被逮捕:“设局”恶意举报同行...
- 菜鸟学习Spring——60s配置XML方法实现简单AOP
- 访问samba服务器提示无权限使用网络资源
- 又一华尔街之狼?从洗碗工到公司董事长成功之路
- ObjectPostProcessor使用与多种用户定义方式(9)
- -- 31、查询1990年出生的学生名单
- 掌上考典-----自制的一款安卓版的掌上考试工具
- 波轮普通洗衣机的构成和基本工作原理
- java gui狼_5个强大的Java分布式缓存框架
- DataFactory使用
- EXCLE中快速查找重复项
热门文章
- 艾永亮:B站破壁出圈,同是弹幕视频网站,为什么倒下的是A站?
- 项目一 认识Linux操作系统
- 敬业签手机版便签软件怎么绑定QQ或微信互联登录?
- php中strtotime与mktime的Y2K38漏洞(时间最长为2038年)
- 使用ToUpperInvariant避免使用ToUpper
- 桂林理工研究生院计算机软件工程,2019桂林理工大学硕士研究生复试细则之软件工程...
- thread ‘<unnamed>‘ panicked at ‘assertion failed: `(left == right)`
- PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益
- Channel Access Protocal——EPICS Base-3.16版CA协议 - 字节序与数据类型
- ubuntu域名解析失败解决方案