Listvie简单实现购物车功能

 更新时间:2019年08月21日 09:14:53   作者:茫茫碌碌  
这篇文章主要为大家详细介绍了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();
  }
}

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

相关文章

  • 浅析Android Studio 3.0 升级各种坑(推荐)

    浅析Android Studio 3.0 升级各种坑(推荐)

    本文是小编给大家收藏整理的关于Android Studio 3.0 升级后遇到的一些坑,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-11-11
  • Android简单音乐播放实例

    Android简单音乐播放实例

    这篇文章主要介绍了Android简单音乐播放实例,详细介绍了Android Service使用方法
    2015-12-12
  • Android 应用程序的启动流程示例详解

    Android 应用程序的启动流程示例详解

    这篇文章主要为大家介绍了Android 应用程序的启动流程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 深入剖析Android的Volley库中的图片加载功能

    深入剖析Android的Volley库中的图片加载功能

    这篇文章主要介绍了Android的Volley框架中的图片加载功能,从源码剖析了Volley加载图片时的请求队列处理等方面,需要的朋友可以参考下
    2016-04-04
  • Android编写简易文件管理模块

    Android编写简易文件管理模块

    这篇文章主要为大家详细介绍了Android编写简易文件管理模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android编程之SharedPreferences文件存储操作实例分析

    Android编程之SharedPreferences文件存储操作实例分析

    这篇文章主要介绍了Android编程之SharedPreferences文件存储操作方法,实例分析了SharedPreferences文件操作的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Android中ShapeableImageView使用实例详解(告别shape、三方库)

    Android中ShapeableImageView使用实例详解(告别shape、三方库)

    之前Google推送了文章,Android Material组件1.2.0里面就有ShapeableImageView,不用像以前再写shape,下面这篇文章主要给大家介绍了关于Android中ShapeableImageView使用的相关资料,需要的朋友可以参考下
    2022-09-09
  • 安卓自定义流程进度图控件实例代码

    安卓自定义流程进度图控件实例代码

    本篇文章主要介绍了安卓自定义流程进度图控件实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Android文件读写的几种方式

    Android文件读写的几种方式

    文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种,下面这篇文章主要给大家介绍了关于Android文件读写的几种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Android小程序实现切换背景颜色

    Android小程序实现切换背景颜色

    这篇文章主要介绍了Android小程序实现切换背景颜色,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论