购物车/选择

自定义控件

package che.bawei.com.che.my;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import che.bawei.com.che.R;

public class MeView extends LinearLayout implements View.OnClickListener {
    int sum = 1;
    private Button text;

    public MeView(Context context) {
        super(context);
    }

    public MeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.meview, this);
        //找控件
        Button jia = findViewById(R.id.me_jia);
        text = findViewById(R.id.me_text);
        Button jian = findViewById(R.id.me_jian);
        //设置默认值1
        text.setText(sum + "");
        //点击事件
        jia.setOnClickListener(this);
        jian.setOnClickListener(this);
    }

    public MeView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.me_jia:
                sum++;
                text.setText(sum + "");
                //适配器里做刷新
                if (onSumItemClick != null) {
                    onSumItemClick.sumItemClick();
                }
                break;
            case R.id.me_jian:
                //判断不能小于一
                if (sum > 1) {
                    sum--;
                    text.setText(sum + "");
                    //适配器里做刷新
                    if (onSumItemClick != null) {
                        onSumItemClick.sumItemClick();
                    }
                }
                break;
        }
    }

    //接口回调
    public interface OnSumItemClick {
        void sumItemClick();
    }

    public OnSumItemClick onSumItemClick;

    public void setOnSumItemClick(OnSumItemClick onSumItemClick) {
        this.onSumItemClick = onSumItemClick;
    }
}

Activity

package che.bawei.com.che;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

import java.util.List;

import che.bawei.com.che.adapter.MyAdapter;
import che.bawei.com.che.my.SearchBean;
import che.bawei.com.che.presenter.SearchPresenter;
import che.bawei.com.che.view.SearchView;

public class MainActivity extends AppCompatActivity implements SearchView, View.OnClickListener {

    private RecyclerView recycler;
    private SearchPresenter presenter;
    private String Url = "http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword=板鞋&page=1&count=5";
    private MyAdapter myAdapter;
    private CheckBox checkBox;
    private TextView cmoney;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        recycler = findViewById(R.id.main_recycler);
        checkBox = findViewById(R.id.main_check);
        cmoney = findViewById(R.id.main_text);
        //checkBox点击事件
        checkBox.setOnClickListener(this);
        //设置样式
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recycler.setLayoutManager(linearLayoutManager);
        //关联P
        presenter = new SearchPresenter(this);
        presenter.attach(this);
        presenter.setTextData(Url);

    }

    //回调的值
    @Override
    public void SearchData(List<SearchBean.ResultBean> data) {
        myAdapter = new MyAdapter(this, data);
        recycler.setAdapter(myAdapter);
        //根据条目里的CheckBox设置
        myAdapter.setOncheckClick(new MyAdapter.OncheckClick() {
            @Override
            public void setBoolean(boolean check) {
                checkBox.setChecked(check);
            }
        });
        //总价
        myAdapter.setOnMoneyClick(new MyAdapter.OnMoneyClick() {
            @Override
            public void getData(Integer money) {
                cmoney.setText(money + "");
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.deach();
    }

    @Override
    public void onClick(View v) {
        //调用适配器里的全选/全不选的方法
        switch (v.getId()) {
            case R.id.main_check:
                if (checkBox.isChecked()) {//根据当前状态装置
                    myAdapter.setisCheck(true);
                } else {
                    myAdapter.setisCheck(false);
                }
                break;
        }
    }
}


Adapter

package che.bawei.com.che.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import che.bawei.com.che.R;
import che.bawei.com.che.my.MeView;
import che.bawei.com.che.my.SearchBean;


public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private List<SearchBean.ResultBean> list;
    private Map<String, Boolean> map = new HashMap<>();
    //价格的map集合
    private Map<Integer, Integer> map2 = new HashMap<>();

    public MyAdapter(Context context, List<SearchBean.ResultBean> list) {
        this.context = context;
        this.list = list;
        getCheck(false);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.meitem, null, false);
        NumHolder numHolder = new NumHolder(view);
        return numHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
        //赋值
        final NumHolder numHolder = (NumHolder) viewHolder;
        numHolder.text.setText(list.get(i).getCommodityName());
        numHolder.money.setText("$" + list.get(i).getPrice() + ".00");
        Glide.with(context).load(list.get(i).getMasterPic()).into(numHolder.image);
        //设置状态
        String id = list.get(i).getCommodityId() + "";
        numHolder.check.setChecked(map.get(id));
        //根据条目里的CheckBox设置外面的
        numHolder.check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*-------------------------------做价格的---------------------------------------------*/
                //改变状态清空价格集合
                map2.clear();
                //刷新适配器
                notifyDataSetChanged();
                /*-----------------------------------------------------------------------------------*/
                //获取id
                String id2 = list.get(i).getCommodityId() + "";
                //存入map
                map.put(id2, numHolder.check.isChecked());
                //设置状态
                boolean isCheck = true;
                //循环
                for (String key : map.keySet()) {
                    Boolean aBoolean = map.get(key);
                    //判断是否有没选中的
                    if (!aBoolean) { //如果aBoolean是turn,!ture ==false,如果aBoolean是false,!false==ture
                        isCheck = false;
                        if (oncheckClick != null) {
                            oncheckClick.setBoolean(isCheck);
                        }
                        return;
                    }
                }
                if (isCheck) {
                    if (oncheckClick != null) {
                        oncheckClick.setBoolean(isCheck);
                    }
                }
            }
        });
        //价格
        //点击加减刷新适配器
        numHolder.myView.setOnSumItemClick(new MeView.OnSumItemClick() {
            @Override
            public void sumItemClick() {
                notifyDataSetChanged();
            }
        });
        //判断如果选中吧价格和数量存入集合中
        if (numHolder.check.isChecked()) {
            //获取数量
            TextView text = numHolder.myView.findViewById(R.id.me_text);
            String text2 = text.getText().toString();
            //转化成Int类型
            Integer sum = Integer.valueOf(text2);
            //获取价格
            int price = list.get(i).getPrice();
            //存入集合
            map2.put(price, sum);
            //获取价格的方法
            getMoney();
        } else {
            //在获取一遍
            getMoney();
        }

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class NumHolder extends RecyclerView.ViewHolder {

        private final ImageView image;
        private final TextView text;
        private final TextView money;
        private final che.bawei.com.che.my.MeView myView;
        private final CheckBox check;

        public NumHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.item_image);
            text = itemView.findViewById(R.id.item_text);
            money = itemView.findViewById(R.id.item_money);
            myView = itemView.findViewById(R.id.item_sum);
            check = itemView.findViewById(R.id.item_check);
        }
    }

    //全选/全不选
    public void setisCheck(boolean check) {
        //改变状态清空价格集合
        map2.clear();
        //--------------------------------------
        getCheck(check);
        notifyDataSetChanged();
    }

    private void getCheck(boolean check) {
        //去设置默认值
        //id当键存入集合
        map.clear();
        for (int i = 0; i < list.size(); i++) {
            String id = list.get(i).getCommodityId() + "";
            map.put(id, check);
        }
    }

    //获取价格
    private void getMoney() {
        //设置一个值
        int money = 0;
        //遍历集合
        for (Integer key : map2.keySet()) {
            //键是价格,值是数量
            money += key * map2.get(key);
        }
        //把价格回调回去
        if (onMoneyClick != null) {
            onMoneyClick.getData(money);
        }
    }

    //checkBox接口回调
    public interface OncheckClick {
        void setBoolean(boolean check);
    }

    public OncheckClick oncheckClick;

    public void setOncheckClick(OncheckClick oncheckClick) {
        this.oncheckClick = oncheckClick;
    }

    //价格的接口回调

    public interface OnMoneyClick {
        void getData(Integer money);
    }

    public OnMoneyClick onMoneyClick;

    public void setOnMoneyClick(OnMoneyClick onMoneyClick) {
        this.onMoneyClick = onMoneyClick;
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值