
购物车
发布日期:2021-06-27 12:56:11
浏览次数:30
分类:技术文章
本文共 23679 字,大约阅读时间需要 78 分钟。
//mainActivity=========
package com.bwei.model.day20;import android.graphics.PointF;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ExpandableListView;import android.widget.TextView;import com.bwei.model.day20.adapter.ExpandAdapter;import com.bwei.model.day20.bean.JsonBean;import com.bwei.model.day20.net.OkHttpUtil;import com.bwei.model.day20.unm.AddNumLayout;import com.google.gson.Gson;import java.util.List;public class MainActivity extends AppCompatActivity { private ExpandableListView mExpandView; private String urlPath = "http://120.27.23.105/product/getCarts?source=android&uid=99"; private ExpandAdapter mAdapter; private ListmData; private CheckBox txtQaxa; private TextView txtZong, txtJiesuan; private JsonBean.DataBean.ListBean mChild; private AddNumLayout onNumChangedListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initView(); if (mAdapter == null){ //添加适配器 mAdapter = new ExpandAdapter(this); mExpandView.setAdapter(mAdapter); } //初始化网络 initData(); //点击事件 initListener(); } //点击方法 private void setCheckAll(int s){ int itemCount = mAdapter.getGroupCount(); for (int i = 0; i < itemCount; i++) { JsonBean.DataBean item = (JsonBean.DataBean) mAdapter.getGroup(i); List list = item.getList(); for (int j = 0; j < list.size(); j++) { JsonBean.DataBean.ListBean listBean = list.get(j); listBean.setSelected(s); } } mAdapter.notifyDataSetChanged(); getToal(); } private void initListener() { txtQaxa.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked){ setCheckAll(0); }else { setCheckAll(1); } } }); mExpandView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { JsonBean.DataBean group = (JsonBean.DataBean) mAdapter.getGroup(groupPosition); group.setIschecked(!group.isIschecked()); int c = 1; if (group.isIschecked()){ c = 0; } List list = group.getList(); for (int i = 0; i < list.size(); i++) { JsonBean.DataBean.ListBean listBean = list.get(i); listBean.setSelected(c); } mAdapter.notifyDataSetChanged(); getToal(); return true; } }); mExpandView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { mChild = (JsonBean.DataBean.ListBean) mAdapter.getChild(groupPosition, childPosition); boolean checked = mChild.isChecked(); if (checked){ mChild.setSelected(0); }else { mChild.setSelected(1); } mAdapter.notifyDataSetChanged(); getToal(); return true; } }); mAdapter.setOnNumChangedListener(new AddNumLayout.OnClickListener() { @Override public void onClick(View v) { getToal(); } }); } private void initData() { //连接okhttp new OkHttpUtil().get(urlPath).setGetData(new OkHttpUtil.GetData() { @Override public void Feast(String s) { Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(s, JsonBean.class); mData = jsonBean.getData(); mAdapter.setList(mData); //默认展开 for (int i = 0; i < mAdapter.getGroupCount(); i++) { mExpandView.expandGroup(i); } } }); } private void initView() { mExpandView = (ExpandableListView) findViewById(R.id.expand_view); txtQaxa = (CheckBox) findViewById(R.id.txt_qaxa); txtZong = (TextView) findViewById(R.id.txt_zong); txtJiesuan = (TextView) findViewById(R.id.txt_jisuan); } public void getToal() { double total = 0; int groupCount = mAdapter.getGroupCount(); for (int i = 0; i < groupCount; i++) { JsonBean.DataBean item = (JsonBean.DataBean) mAdapter.getGroup(i); List list = item.getList(); for (int j = 0; j < list.size(); j++) { JsonBean.DataBean.ListBean listBean = list.get(j); boolean checked = listBean.isChecked(); if (!checked){ double price = listBean.getPrice(); total += price * listBean.getNum(); } } } txtZong.setText("合计:"+ total); }}
//适配器adapter
package com.bwei.model.day20.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.bwei.model.day20.R;import com.bwei.model.day20.bean.JsonBean;import com.bwei.model.day20.unm.AddNumLayout;import java.util.ArrayList;import java.util.List;public class ExpandAdapter extends BaseExpandableListAdapter { private Context mContext; private ListmList = new ArrayList (); private View.OnClickListener mOnNumChangedListener; public ExpandAdapter(Context context) { mContext = context; } @Override public int getGroupCount() { return mList.size(); } @Override public int getChildrenCount(int groupPosition) { return mList.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return mList.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return mList.get(groupPosition).getList().get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder groupHolder; if (convertView == null){ convertView = View.inflate(mContext, R.layout.adapter_group, null); groupHolder = new GroupViewHolder(); groupHolder.groupBox = (CheckBox) convertView.findViewById(R.id.group_box); groupHolder.txtName = (TextView) convertView.findViewById(R.id.txt_name); convertView.setTag(groupHolder); }else{ groupHolder = (GroupViewHolder) convertView.getTag(); } groupHolder.txtName.setText(mList.get(groupPosition).getSellerName()); groupHolder.groupBox.setChecked(mList.get(groupPosition).isIschecked()); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder childHolder; if (convertView == null){ convertView = View.inflate(mContext, R.layout.adapter_child, null); childHolder = new ChildViewHolder(); childHolder.childBox = (CheckBox) convertView.findViewById(R.id.child_box); childHolder.childImage = (ImageView) convertView.findViewById(R.id.child_image); childHolder.txtTitle = (TextView) convertView.findViewById(R.id.txt_title); childHolder.txtPrice = (TextView) convertView.findViewById(R.id.txt_price); childHolder.sumAddsub = (AddNumLayout) convertView.findViewById(R.id.sum_addsub); convertView.setTag(childHolder); }else { childHolder = (ChildViewHolder) convertView.getTag(); } final JsonBean.DataBean.ListBean listBean = mList.get(groupPosition).getList().get(childPosition); childHolder.childBox.setChecked(listBean.getSelected()==0); childHolder.txtTitle.setText(listBean.getTitle()); childHolder.txtPrice.setText(listBean.getPrice()+ ""); childHolder.sumAddsub.setCurentcount(listBean.getNum()); Glide.with(mContext).load(listBean.getImages().split("\\|")[0]).into(childHolder.childImage); return convertView; } public void setOnNumChangedListener(View.OnClickListener onNumChangedListener) { mOnNumChangedListener = onNumChangedListener; } public void setList(List list) { mList = list; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class GroupViewHolder{ public CheckBox groupBox; public TextView txtName; } class ChildViewHolder{ public CheckBox childBox; public ImageView childImage; public TextView txtPrice; public TextView txtTitle; public AddNumLayout sumAddsub; }}
//父类xml
//子类xml
//自定义加减
public class ShoppingNumView extends LinearLayout { private TextView sumSubtract, sumNmb, sumAdd; //自动生成 public ShoppingNumView(Context context) { this( context, null ); } public ShoppingNumView(Context context, @Nullable AttributeSet attrs) { this( context, attrs, -1 ); } public ShoppingNumView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super( context, attrs, defStyleAttr ); initView( context ); initlisetener(); } private void initView(Context context) { View view = View.inflate( context, R.layout.shopping_adapter_view, this ); sumSubtract = (TextView) view.findViewById( R.id.sum_subtract ); sumNmb = (TextView) view.findViewById( R.id.sum_nmb ); sumAdd = (TextView) view.findViewById( R.id.sum_add ); sumNmb.setText( "1" ); } private void initlisetener() { sumAdd.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { add(); } } ); sumSubtract.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Subtract(); } } ); } private void add() { String shu = sumNmb.getText().toString(); int suan = Integer.parseInt( shu ); suan++; setCurentcount( suan ); } private void Subtract() { String shu = sumNmb.getText().toString(); int suan = Integer.parseInt(shu); if (suan > 1){ suan--; setCurentcount(suan); }else { Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show(); } } public int getCurentcount() { return Integer.parseInt( sumNmb.getText().toString() ); } public void setCurentcount(int num) { sumNmb.setText( num+"" ); if (onNumChangedListener != null){ onNumChangedListener.onNumChange( this, num ); } } private OnNumChangedListener onNumChangedListener; public void setOnNumChangedListener(OnNumChangedListener onNumChangedListener) { this.onNumChangedListener = onNumChangedListener; } private interface OnNumChangedListener{ void onNumChange(View view, int curNum); }}
//加减xml
//RecyclerView ========================================
// Activity
public class MainActivity extends AppCompatActivity implements CarView{ @BindView(R.id.tou) TextView tou; @BindView(R.id.car_recycler) RecyclerView carRecycler; @BindView(R.id.car_box) CheckBox carBox; @BindView(R.id.car_zong) TextView carZong; private ListmList = new ArrayList<>(); private CarRecycleAdapter mCarAdapter; private Object mTotal; private List mChildlist; private TextView carMai; Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage( msg ); switch (msg.what){ case 1: setAdapter(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); ButterKnife.bind( this ); carMai = (TextView) findViewById( R.id.car_mai ); //p层 CarPesenter pesenter = new CarPesenter( this ); pesenter.car("71"); } public void setAdapter(){ //设置布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); carRecycler.setLayoutManager(layoutManager); //适配器 mCarAdapter = new CarRecycleAdapter( this, mList); carRecycler.setAdapter(mCarAdapter); //接收接口 mCarAdapter.setOnShopItemClick( new CarRecycleAdapter.OnShopItemClick() { @Override public void onCheckBoxClick(View view, int i) { getTotal(); mCarAdapter.notifyDataSetChanged(); } @Override public void onSubViewClick(View view, int i) { getTotal(); mCarAdapter.notifyDataSetChanged(); } @Override public void onAddViewClick(View view, int i) { getTotal(); mCarAdapter.notifyDataSetChanged(); } } ); } //总价 public void getTotal() { int num = 0; double total = 0; for (int i = 0; i < mList.size(); i++) { List list = mList.get( i ).getList(); for (int j = 0; j < list.size(); j++) { if (list.get( j ).getSelected()==1){ num += list.get( j ).getNum(); total += list.get( j ).getNum() * list.get( j ).getPrice(); } } } carZong.setText( "合计:¥" +total ); } @OnClick({R.id.tou, R.id.car_recycler, R.id.car_box, R.id.car_zong}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.tou: break; case R.id.car_recycler: break; case R.id.car_box: //全选 for (int i = 0; i < mCarAdapter.getItemCount(); i++) { if (carBox.isChecked()){ mList.get( i ).setIsChecked( 1 ); }else { mList.get( i ).setIsChecked( 0 ); } mChildlist = mList.get( i ).getList(); for (int j = 0; j < mChildlist.size(); j++) { if (carBox.isChecked()){ mChildlist.get( j ).setSelected(1); }else { mChildlist.get( j ).setSelected( 0 ); } } } mCarAdapter.notifyDataSetChanged(); getTotal(); break; case R.id.car_zong: break; } } @Override public void carSuccess(CarBean success) { mList = success.getData(); Toast.makeText( this, mList.toString()+"", Toast.LENGTH_SHORT ).show(); mHandler.sendEmptyMessage( 1 ); } @Override public void carFail(String carfail) { Toast.makeText( this, carfail, Toast.LENGTH_SHORT ).show(); }}
//适配器父布局
public class CarRecycleAdapter extends RecyclerView.Adapter{ private Context mContext; private List mList; private CarchildAdapter mChildadapter; public CarRecycleAdapter(Context context, List list) { mContext = context; mList = list; } //接口回调 private OnShopItemClick mOnShopItemClick; public void setOnShopItemClick(OnShopItemClick onShopItemClick) { this.mOnShopItemClick = onShopItemClick; } public interface OnShopItemClick{ void onCheckBoxClick(View view, int i); void onSubViewClick(View view, int i); void onAddViewClick(View view, int i); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = View.inflate( mContext, R.layout.carfu_adapter, null ); ViewHolder holder = new ViewHolder( view ); return holder; } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder,final int i) { viewHolder.adapterFuCheck.setText( mList.get( i ).getSellerName()+"" ); int selected = mList.get( i ).getIsChecked(); if (selected == 1){ viewHolder.adapterFuCheck.setChecked( true ); }else { viewHolder.adapterFuCheck.setChecked( false ); } //点击商家选中商品(不好使) viewHolder.adapterFuCheck.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { List childList = mList.get( i ).getList(); for (int j = 0; j < childList.size(); j++) { childList.get( j ).setSelected( 1 ); } mChildadapter.notifyDataSetChanged(); } } ); //设置布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(mContext); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); viewHolder.adapterChildRecyclerView.setLayoutManager(layoutManager); //连接子布局集合 List list = mList.get( i ).getList(); //适配器 mChildadapter = new CarchildAdapter( mContext, list ); viewHolder.adapterChildRecyclerView.setAdapter( mChildadapter ); //点击接收接口回调 mChildadapter.setOnChildItemClick( new CarchildAdapter.OnChildItemClick() { @Override public void onCheckBoxClick(View view, int i) { mOnShopItemClick.onCheckBoxClick(view, i); } @Override public void onSubViewClick(View view, int i) { mOnShopItemClick.onSubViewClick(view,i); } @Override public void onAddViewClick(View view, int i) { mOnShopItemClick.onAddViewClick(view, i); } } ); } @Override public int getItemCount() { return mList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private final RecyclerView adapterChildRecyclerView; private final CheckBox adapterFuCheck; public ViewHolder(@NonNull View itemView) { super( itemView ); adapterFuCheck = (CheckBox) itemView.findViewById( R.id.adapter_fuCheck ); adapterChildRecyclerView = (RecyclerView) itemView.findViewById( R.id.adapter_child_recyclerView ); } }}
//子布局
public class CarchildAdapter extends RecyclerView.Adapter{ private Context mContext; private List mList; public CarchildAdapter(Context context, List list) { mContext = context; mList = list; } //接口回调 private OnChildItemClick onChildItemClick; public void setOnChildItemClick(OnChildItemClick onChildItemClick) { this.onChildItemClick = onChildItemClick; } public interface OnChildItemClick { void onCheckBoxClick(View view, int i); void onSubViewClick(View view, int i); void onAddViewClick(View view, int i); } @NonNull @Override public ViewHodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = View.inflate( mContext, R.layout.carchild_adapter, null ); ViewHodel holder = new ViewHodel( view ); return holder; } @Override public void onBindViewHolder(@NonNull final ViewHodel viewHodel, final int i) { viewHodel.tvGoodsName.setText( mList.get( i ).getTitle() ); viewHodel.tvGoodsPrice.setText( mList.get( i ).getPrice() + "" ); //特殊图片 String images = mList.get( i ).getImages(); String[] spit = images.split( "\\|" ); Glide.with( mContext ).load(spit[0] ).into( viewHodel.adapterChildimage ); viewHodel.tvNum.setText( mList.get( i ).getNum() + "" ); //选择器 viewHodel.adapterChildCheck.setChecked( mList.get( i ).getSelected()== 1 ); //点击选择框 viewHodel.adapterChildCheck.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { int check = mList.get( i ).getSelected(); if (check == 1) { mList.get( i ).setSelected( 0 ); } else { mList.get( i ).setSelected( 1 ); } notifyDataSetChanged(); onChildItemClick.onCheckBoxClick( v, i ); } } ); //点击加减 viewHodel.tvSub.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { int num = mList.get( i ).getNum(); if (num > 1) { num--; mList.get( i ).setNum( num ); } notifyDataSetChanged(); onChildItemClick.onSubViewClick( v, i ); } } ); viewHodel.tvAdd.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { int numadd = mList.get( i ).getNum(); numadd++; mList.get( i ).setNum( numadd ); notifyDataSetChanged(); onChildItemClick.onAddViewClick( v, i ); } } ); } @Override public int getItemCount() { return mList.size(); } public class ViewHodel extends RecyclerView.ViewHolder { private final CheckBox adapterChildCheck; private final ImageView adapterChildimage; private final TextView tvGoodsName, tvGoodsPrice, tvNum, tvSub, tvAdd; public ViewHodel(@NonNull View itemView) { super( itemView ); adapterChildCheck = (CheckBox) itemView.findViewById( R.id.adapter_childCheck ); adapterChildimage = (ImageView) itemView.findViewById( R.id.adapter_childimage ); tvGoodsName = (TextView) itemView.findViewById( R.id.tv_goodsName ); tvGoodsPrice = (TextView) itemView.findViewById( R.id.tv_goodsPrice ); tvSub = (TextView) itemView.findViewById( R.id.tv_sub ); tvNum = (TextView) itemView.findViewById( R.id.tv_num ); tvAdd = (TextView) itemView.findViewById( R.id.tv_add ); } }}
转载地址:https://blog.csdn.net/weixin_43454157/article/details/84334166 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2023年11月26日 01时38分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python实现kMeans(k均值聚类)
2019-03-28
PCL实现区域增长算法(代码详细解析)
2019-03-28
C/C++常用函数总结以及在ubuntu和vs中运行
2019-03-28
基于tensorflow的一元线性回归详细讲解
2019-03-28
tensorflow简单二维分类 simple_classification
2019-03-28
tensorflow的CNN
2019-03-28
tensorflow的regress(超详细教程)
2019-03-28
tensorflow的dropout 防止过拟合
2019-03-28
PCL包围盒(详细介绍)
2019-03-28
c++调用函数,返回字符串数组
2019-03-28
点云常见几种算法(详细教程)
2019-03-28
UG10.0快速配置环境
2019-03-28
OBB包围盒碰撞检测算法验证
2019-03-28
tensorflow的RNN(递归神经网络)
2019-03-28
Python-Tkinter图形化界面设计(详细教程 )
2019-03-28
CSDN页面内跳转测试
2019-03-28
MDK查找替换
2019-03-28
Tkinter登陆界面设计
2019-03-28
C++将字符串存到数组中
2019-03-28
C++将两个字符串合并在一起
2019-03-28