最近项目遇到一个功能,类似淘宝的购物颜色,尺码联动。
说重点吧,感受比较深的是数据驱动吧,类似前端的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选择颜色,尺码联动相关推荐

  1. Android 购物选择颜色(尺码)实现(一)

    好久都没写博客了,一直忙于公司的项目,这几天有时间所以写点东西,和大家相互学习一下!写的不好的话,还望见谅! 在公司做的项目一直是有关手机购物方面的,所以就会碰到购买东西时,需要选择商品的颜色.尺码. ...

  2. 仿天猫 购物车(Android studio 仿天猫 详情页面 添加购物车选择 颜色 尺寸demo)

    这是我第一次编写博客,有不好的地方请发邮件或留言告知. 注*请勿转载-转载需博主同意 1.首先就是设计页面了–先效果图 2.现在开始看代码,没有啥好说的 这是布局文件 MainActivity 里面的 ...

  3. android用sku算法仿淘宝选择颜色分类弹框。

    当规格超出边界会自动换行,点击规格会根据算法判断关联规格,无则灰显,全部选中后则变化图片.代码是kotlin和java混合. 效果如下,当一行显示不下所有规格时,会自动换行.用的夜神模拟器,分辨率有点 ...

  4. android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程

    易采站长站为您分析Android中颜色选择器和改变字体颜色的实例教程,其中改变字体颜色用到了ColorPicker颜色选择器,需要的朋友可以参考下 1.构建一张七彩图: 我们经常看到这种样子的颜色选择 ...

  5. Android上一种用于选择颜色的控件(颜色选择器)

    目录 引言 核心代码 控件整体代码 demo 引言 最近在做一个项目时其中有一个需求–自定义灯光颜色.要求通过手机端控制灯光颜色,手机端预设五种颜色及用户可自定义颜色.在百度上搜索找到一个开源的色环控 ...

  6. Android 选择商品属性sku

    Android 选择商品属性sku 最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问 ...

  7. 服装盘点机在服装行业颜色尺码仓库条码高效管理中的应用

    服装行业的商品管理的特点是需要管理颜色和尺码 具体逻辑就是: 什么商品,什么颜色,什么尺码,入库多少个? 什么商品,什么颜色,什么尺码,出库多少个? 什么商品,什么颜色,什么尺码,还有库存多少个? 如 ...

  8. Android状态栏颜色修改

    android状态栏颜色修改 状态栏颜色的修改在4.4和5.x环境下分别有不同的方式,低于4.4以下是不能修改的. 5.x环境下 方式一,状态栏将显示为纯净的颜色,没有渐变效果 [java] view ...

  9. java 选择 颜色的控件_JavaFX颜色选择器(ColorPicker)

    颜色选择器控件允许用户从可用的颜色范围中选择颜色,或通过指定RGB或HSB组合设置其他颜色.JavaFX ColorPicker控件具有颜色选择器,调色板和自定义颜色对话框窗口. 创建ColorPic ...

  10. UITableView单元格选择颜色?

    本文翻译自:UITableView Cell selected Color? I have created a custom UITableViewCell . 我创建了一个自定义UITableVie ...

最新文章

  1. 计算机专业期末考试是编程序,计算机专业技能期末考试题
  2. 烂大街的Spring循环依赖该如何回答?
  3. 密码篇——对称加密—DES
  4. 全球与中国终端天线市场发展战略与运营规划分析报告
  5. Vue-使用webpack+vue-cli搭建项目
  6. 放弃Venn-Upset-花瓣图,在线拥抱二分网络
  7. abaqus分析用户手册单元卷_ABAQUS与你我的约定
  8. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?|文末送书
  9. leadshop开源商城系统
  10. 发黄图再截图举报!这个社交软件运营合伙人被逮捕:“设局”恶意举报同行...
  11. 菜鸟学习Spring——60s配置XML方法实现简单AOP
  12. 访问samba服务器提示无权限使用网络资源
  13. 又一华尔街之狼?从洗碗工到公司董事长成功之路
  14. ObjectPostProcessor使用与多种用户定义方式(9)
  15. -- 31、查询1990年出生的学生名单
  16. 掌上考典-----自制的一款安卓版的掌上考试工具
  17. 波轮普通洗衣机的构成和基本工作原理
  18. java gui狼_5个强大的Java分布式缓存框架
  19. DataFactory使用
  20. EXCLE中快速查找重复项

热门文章

  1. 艾永亮:B站破壁出圈,同是弹幕视频网站,为什么倒下的是A站?
  2. 项目一 认识Linux操作系统
  3. 敬业签手机版便签软件怎么绑定QQ或微信互联登录?
  4. php中strtotime与mktime的Y2K38漏洞(时间最长为2038年)
  5. 使用ToUpperInvariant避免使用ToUpper
  6. 桂林理工研究生院计算机软件工程,2019桂林理工大学硕士研究生复试细则之软件工程...
  7. thread ‘<unnamed>‘ panicked at ‘assertion failed: `(left == right)`
  8. PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益
  9. Channel Access Protocal——EPICS Base-3.16版CA协议 - 字节序与数据类型
  10. ubuntu域名解析失败解决方案