当前位置: 移动技术网 > IT编程>移动开发>Android > Listvie简单实现购物车功能

Listvie简单实现购物车功能

2019年09月09日  | 移动技术网IT编程  | 我要评论

海外华人网站,驾校约考,神话故事大禹治水

本文实例为大家分享了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();
  }
}

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网