Listvie简单实现购物车功能

本文实例为大家分享了Listvie简单实现购物车的具体代码,供大家参考,具体内容如下

1.自定义view实现加减

public class MyView extends LinearLayout implements View.OnClickListener {

  private OnAmountChangeListener mListener;
  private int count;
  private TextView numText;

  public MyView(Context context) {
    this(context,null);
  }

  public MyView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs,0);
  }

  public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    View view = View.inflate(context, R.layout.add, this);
    initView(view);

  }
  public void setText(int num){
    numText.setText(""+num);
  }
  public int getText(){
    getTextString();
    return count;
  }

  private void initView(View view) {

    Button addBtn = view.findViewById(R.id.btn_add);
    Button jianBtn = view.findViewById(R.id.btn_jian);
    numText = view.findViewById(R.id.txt_num);
    getTextString();
    addBtn.setOnClickListener(this);
    jianBtn.setOnClickListener(this);
  }

  public void setOnclickNum(OnAmountChangeListener mListener){
    this.mListener = mListener;
  }
  @Override
  public void onClick(View view) {
    getTextString();
    switch (view.getId()){
      case R.id.btn_add:
        count++;
        break;
      case R.id.btn_jian:
        if(count>0){
          count--;
        }
        break;
    }
    numText.setText(""+count);
    if(mListener!=null) {
      mListener.onAmountChange(view, count);
    }
  }

  public void getTextString() {
    String numStr = numText.getText().toString().trim();
    count = Integer.parseInt(numStr);
  }
  public interface OnAmountChangeListener {
    void onAmountChange(View view, int amount);
  }
}

2.适配器接口回调

public class MyAdapter extends BaseAdapter {
  private List<Text> mList;
  private Context context ;
  private GaroupClick garoupClick;
  private int index;
  private CountClick countClick;

  public MyAdapter(Context context) {
    this.context = context;
  }

  @Override
  public int getCount() {
    return mList.size();
  }
  public void setData(List<Text> mList){
    this.mList = mList;
    notifyDataSetChanged();
  }
  @Override
  public Object getItem(int i) {
    return mList.get(i);
  }

  @Override
  public long getItemId(int i) {
    return i;
  }

  public void setOnCountClick(CountClick click){
    this.countClick = click;
  }
  public void setOnGroupclick(GaroupClick groupclick){
    this.garoupClick = groupclick;
  }
  @Override
  public View getView(final int i, View view, ViewGroup viewGroup) {
    final ViewHolder holder ;
    if(view==null){
      holder = new ViewHolder();
      view = View.inflate(context, R.layout.item, null);
      holder.childCheck = view.findViewById(R.id.cb_chid_checked);
      holder.txtPrice = view.findViewById(R.id.txt_price);
      holder.myView = view.findViewById(R.id.myview);
      view.setTag(holder);
    }else{
      holder = (ViewHolder)view.getTag();
    }
    final Text text = mList. get(i);

    holder.childCheck.setChecked(text.isChoose());
    holder.txtPrice.setText(""+text.getPrice());
    holder.myView.setText(text.getCount());
    holder.myView.setOnclickNum(new MyView.OnAmountChangeListener() {
      @Override
      public void onAmountChange(View view, int amount) {
        text.setCount(amount);
      }
    });
    boolean checked = holder.childCheck.isChecked();
    if(checked){
      holder.myView.setOnclickNum(new MyView.OnAmountChangeListener() {
        @Override
        public void onAmountChange(View view, int amount) {
          if(countClick!=null){
            countClick.onNumClick(i,amount);
          }
        }
      });
    }

    holder.childCheck.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        text.setChoose(((CheckBox)view).isChecked());

        if(garoupClick!=null){
          garoupClick.onItemClick(i,((CheckBox)view).isChecked());
        }

      }
    });
    return view;
  }
  class ViewHolder{
    CheckBox childCheck;
    TextView txtPrice;
    MyView myView;
  }
  public interface GaroupClick{
    void onItemClick(int position, boolean isChoose);
  }
  public interface CountClick{
    void onNumClick(int position, int count);
  }

}

3.调用

public class MainActivity extends AppCompatActivity implements MyAdapter.GaroupClick, MyAdapter.CountClick {

  private Button jiesuanBtn;
  private ListView mListView;
  private CheckBox allCheck;
  private TextView priceText;
  private List<Text> mList = new ArrayList<>();
  private int numPrice = 0;
  private int count = 0;
  private MyAdapter adapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initData();

  }

  private void initData() {
    for (int i = 0; i < 30; i++) {
      Text txt = new Text();
      txt.setPrice(20);
      txt.setCount(1);
      mList.add(txt);
    }

    adapter = new MyAdapter(this);
    adapter.setData(mList);
    mListView.setAdapter(adapter);
    adapter.setOnGroupclick(this);
    adapter.setOnCountClick(this);
  }

  public boolean isAllChecked(){
    for (Text text : mList) {
      if(!text.isChoose()){//遍历集合,有一个不选return false
        return false;
      }
    }
    return true;
  }
  private void initView() {
    jiesuanBtn = (Button) findViewById(R.id.btn_num);
    mListView = (ListView) findViewById(R.id.listview);
    allCheck = (CheckBox) findViewById(R.id.cb_all_checked);
    priceText = (TextView) findViewById(R.id.txt_price_sum);
    allCheck.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        if(mList.size()!=0) {
          if(allCheck.isChecked()) {
            for (int i = 0; i < mList.size(); i++) {
              mList.get(i).setChoose(true);
              adapter.notifyDataSetChanged();
            }
          }else{
            for (int i = 0; i < mList.size(); i++) {
              mList.get(i).setChoose(false);
              adapter.notifyDataSetChanged();
            }
          }
          upDate();
        }
      }

    });

    jiesuanBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, PayDemoActivity.class);
        startActivity(intent);
      }
    });
  }

  private void upDate() {
    numPrice = 0;
    count = 0;
    for (int i = 0; i < mList.size(); i++) {
      Text text = mList.get(i);
      if(text.isChoose()){
        count++;
        numPrice += text.getPrice()*text.getCount();
      }
    }
    jiesuanBtn.setText("结算("+count+")");
    priceText.setText("合计:"+numPrice);
  }

  @Override
  public void onItemClick(int position, boolean isChoose) {
    mList.get(position).setChoose(isChoose);
    if(isAllChecked()){
      allCheck.setChecked(true);
    }else{
      allCheck.setChecked(false);
    }
    adapter.notifyDataSetChanged();
    upDate();
  }

  @Override
  public void onNumClick(int position, int count) {
    mList.get(position).setCount(count);
    adapter.notifyDataSetChanged();
    upDate();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ExpandableListView实现二级列表购物车

    android中常常要用到ListView,有时也要用到ExpandableListView,如在手机设置中,对于分类有很好的效果,会用ListView的人一定会用ExpandableListView,因为ExpandableListView extends ListView的,下面来看个简单的例子 运行效果图: 导入依赖 compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.okhttp3:okhttp:3.9.0' 记

  • Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑

    使用了RecyclerView嵌套RecyclerView的方案. 购物车的第一个界面为RecyclerView,每个Item里面包含一个店铺.在Item中使用RecyclerView包含店铺和店铺的多个商品. 实现思路: 使用接口回调将第二个adapter的商品选择的监听事件回调给第一个adapter后再在第一个adapter中回调给MainActivity. 使用接口回调将第一个adapter的商品选择的监听事件回调给MainActivity. 在MainActivity中处理第一个adap

  • Listvie简单实现购物车功能

    本文实例为大家分享了Listvie简单实现购物车的具体代码,供大家参考,具体内容如下 1.自定义view实现加减 public class MyView extends LinearLayout implements View.OnClickListener { private OnAmountChangeListener mListener; private int count; private TextView numText; public MyView(Context context)

  • 使用Angular.js实现简单的购物车功能

    先给大家分享实现代码,在代码下面有效果图展示,大家可以两者结合参考下,废话不多说了,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="http://code.angularjs.org/1.2.5/angular.min.js"></script

  • JAVAEE中用Session简单实现购物车功能示例代码

    Session简单实现购物车功能 这个小程序主要就3个页面,一个商品列表页面(HomeServlet),一个是提示加入购物车页面(AddCartTipServlet),一个是显示购物车清单页面(ShowCartServlet). HomeServlet页面: @WebServlet({ "/HomeServlet", "/home" }) public class HomeServlet extends HttpServlet { private static fi

  • vue实现简单的购物车功能

    本文实例为大家分享了vue实现简单购物车功能的具体代码,供大家参考,具体内容如下 1.实现效果: 2.涉及到的知识点: toFixed函数.过滤器.reduce高阶函数.v-bind:disabled.v-if 3.代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-

  • jQuery使用cookie与json简单实现购物车功能

    本文实例讲述了jQuery使用cookie与json简单实现购物车的方法.分享给大家供大家参考,具体如下: 1.生成一个cookie 用来存储商品的id  String类型 2.添加商品id的时候 把cookie转化成数组,并检查是否已经包含了.没有包含用js push重新生成新的数组. 3.把数组转化成String 用cookie存储. 以下是jquery对cookie和JSON的操作方法 $.cookie("cart","ids",{expires:-7,pat

  • angularjs实现简单的购物车功能

    本文实例为大家分享了angularjs实现购物车功能的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; margin-left: 10px; } li{ list-

  • vue编写简单的购物车功能

    使用vue写出简单的购物车,供大家参考,具体内容如下 代码: // An highlighted block <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&

  • vuex实现简单的购物车功能

    本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下 文件目录如下: 购物车组件 <template> <div> <h1>vuex-shopCart</h1> <div class="shop-listbox"> <shop-list /> </div> <h2>已选商品</h2> <div class="shop-cartbox&qu

  • php实现简单加入购物车功能

    今天在练习购物车以及提交订单,写的有点头晕,顺便也整理一下,这个购物车相对来说比较简单,用于短暂存储,并没有存储到数据库, 购物车对于爱网购的人来说简直是熟悉的不能再熟悉了,在写购物车之前,我们首先要构思一下,我们需要先从数据库中调出一张表格,这里 我用的是fruit表,其次是登录表,我用的是login表,用来调用户名和密码的,所有的都准备好之后就要考虑放入购物车是会有三种情况的: 第一种情况:购物车里面什么都没有 第二种情况:购物车里面已经有此产品了,再次加入 这种情况下考虑到的是 数量要+1

  • 微信小程序实现简单的购物车功能

    本文实例为大家分享了微信小程序实现简单购物车的具体代码,供大家参考,具体内容如下 实现一个购物车页面,需要哪些数据.整理下大概如下:一个购物车商品列表(carts),列表里的单个item包含:商品id(id),商品图(image),商品名(title),单价(price),数量(amount),单选按钮(selected):全选按钮,需要一个字段(selectAllStatus)表示是否全选:总价(totalPrice):总数量(totalNum).还有一个需要判断的是购物车是否为空(hasLi

随机推荐