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);
        }
    }

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值