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方法里即可。代码太多就不一一贴了。

原创粉丝点击