Android选择颜色,尺码联动
来源:互联网 发布:晨曦软件视频 编辑:程序博客网 时间:2024/04/29 02:43
最近项目遇到一个功能,类似淘宝的购物颜色,尺码联动。
说重点吧,感受比较深的是数据驱动吧,类似前端的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); } } @Override public int getCount() { // TODO Auto-generated method stub return demodels.size(); } @Override protected demodelHolder createViewHolder(View root) { // TODO Auto-generated method stub demodelHolder hold = new demodelHolder(); hold.tv_demodel = (Button) root.findViewById(R.id.adapter_item_btncheck); return hold; } @Override protected void fillView(View root, Object item, ViewHolder holder, final int position) { // TODO Auto-generated method stub final 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() { @Override public 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(); } } }); } @Override protected int getItemViewId() { // TODO Auto-generated method stub return 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方法里即可。代码太多就不一一贴了。
阅读全文
0 0
- Android选择颜色,尺码联动
- Android 购物选择颜色(尺码)实现(一)
- Android 购物选择颜色、尺码实现(二)
- 淘宝的尺码和颜色选择
- jq仿淘宝选择产品颜色尺码
- Android高阶UI之加入购物车选择颜色、尺码实现
- 商城尺码选择效果 jquery
- 商城尺码选择效果 jquery
- android 省市区选择三级联动
- android 城市选择三级联动
- android地区三级联动选择
- android选择城市三级联动
- 尺码
- 浅谈服装行业管理软件中的颜色尺码问题
- 删除尺码和颜色后面价格
- android 颜色选择类
- Android 颜色选择控件
- android颜色选择控件
- Groovy方法注入
- call,apply,bind的联系与区别
- 关于HTTP和HTTPS的安全问题
- LeeNet分类网络(ImageNet100:top1-73.44%,top5-91.40%,CPU_forward-30ms,model_size-2.7M)
- NMOS管G端电平异常,求解释
- Android选择颜色,尺码联动
- 波浪理论
- Altera-SoC QSPI烧写指南
- ubuntu16.04 keras可视化:pydot&graphviz无法导入问题(亲测有效)
- Java笔记--01
- 在sql语句中,如何获取一个日期的周开始日期,周结束日期
- Android stuio Butter Knife配置详解
- MYSQL存储过程实例
- NLTK11《Python自然语言处理》code10 分析语句的含义