android开发购物车

xiaoxiao2021-02-28  23

//购物车布局文件-------------------------------------------------------- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".view.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="购物车" android:textSize="25sp" /> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#999999" /> <ExpandableListView android:id="@+id/expan_list_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:groupIndicator="@null"></ExpandableListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <CheckBox android:id="@+id/xuan" style="@style/Widget.AppCompat.CompoundButton.RadioButton" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" /> <TextView android:id="@+id/sum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="1" android:text="合计:¥0" android:textSize="25sp" /> <Button android:id="@+id/toJiSuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#F00" android:text="去结算" /> </LinearLayout> </LinearLayout> styles.xml文件------------------------------------------------- <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> 购物车加减号的布局----------------------------------------------------- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="30dp" android:orientation="horizontal"> <TextView android:id="@+id/sub" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/add_sub_shape" android:gravity="center" android:text="-" android:textSize="25sp" /> <EditText android:id="@+id/count" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/add_sub_shape" android:focusable="false" android:gravity="center" android:text="0" /> <TextView android:id="@+id/add" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/add_sub_shape" android:gravity="center" android:text="+" android:textSize="25sp" /> </LinearLayout> 购物车商品的布局------------------------------------------------------ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <CheckBox style="@style/Widget.AppCompat.CompoundButton.RadioButton" android:id="@+id/child_cb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/child_icon" android:layout_width="50dp" android:layout_height="50dp" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/child_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="商品名称" android:textSize="20sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/child_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="价格:0" android:textColor="@android:color/holo_red_light" /> <com.example.administrator.myapplication.view.AddSubView android:id="@+id/add_sub_view" android:layout_width="100dp" android:layout_height="25dp" android:layout_marginLeft="40dp"></com.example.administrator.myapplication.view.AddSubView> </LinearLayout> </LinearLayout> </LinearLayout> 购物车商品的布局--------------------------------------------------------<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/parent_cb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/parent_title" android:text="商家" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> AddSubView-------------------------------------------------------- public class AddSubView extends LinearLayout implements View.OnClickListener { private TextView sub; private TextView add; private EditText count; private AddClickListener addClickListener; private SubClickListener subClickListener; private static final String TAG = "AddSubView------------"; public AddSubView(Context context) { this(context, null); } public AddSubView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public AddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View view = View.inflate(context, R.layout.add_sub_layout, this); //获取控件 sub = view.findViewById(R.id.sub); add = view.findViewById(R.id.add); count = view.findViewById(R.id.count); sub.setOnClickListener(this); add.setOnClickListener(this); } //点击事件 @Override public void onClick(View v) { switch (v.getId()) { //减少 case R.id.sub: String c = count.getText().toString(); int i = Integer.parseInt(c); if (i <= 0) { return; } count.setText(--i + ""); subClickListener.onSubClick(v,i); Log.d(TAG, "减-----" + i); break; //增加 case R.id.add: String c1 = count.getText().toString(); int i1 = Integer.parseInt(c1); count.setText(++i1 + ""); addClickListener.onAddClick(v,i1); Log.d(TAG, "onClick() returned: " + "加==="); break; } } public int getCount() { return Integer.parseInt(count.getText().toString().trim()); } public void setCount(int s) { count.setText(s + ""); } public interface AddClickListener { void onAddClick(View view, int count); } public interface SubClickListener { void onSubClick(View view, int count); } public void setOnAddClickListener(AddClickListener addClickListener) { this.addClickListener = addClickListener; } public void setOnSubClickListener(SubClickListener subClickListener) { this.subClickListener = subClickListener; } } SumUtils------------------------------------------------------------ /** * 工具类 */ public class SumUtils { public static String sum(List<GoBean.DataBean> list) { double sum = 0; for (int i = 0; i < list.size(); i++) { List<GoBean.ChildBean> list1 = list.get(i).getList(); for (int j = 0; j < list1.size(); j++) { GoBean.ChildBean childBean = list1.get(j); if (childBean.isChildIsSelected()) { sum += childBean.getPrice()*childBean.getNum(); } } } return Double.toString(sum); } } MainActivity--------------------------------------------------------- public class MainActivity extends AppCompatActivity implements IView, View.OnClickListener { private static final String TAG = "MainActivity"; private ExpandableListView expan_list_view; private CheckBox xuan; private TextView sum; private Button toJiSuan; List<GoBean.DataBean> list; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IPresentermpl iPresentermpl = new IPresentermpl(); iPresentermpl.showCartList(new ICartModelmpl(), this); initView(); } //初始化控件 private void initView() { expan_list_view = findViewById(R.id.expan_list_view); xuan = findViewById(R.id.xuan); sum = findViewById(R.id.sum); toJiSuan = findViewById(R.id.toJiSuan); xuan.setOnClickListener(this); toJiSuan.setOnClickListener(this); } //展示数据 @Override public void showCartList(List<GoBean.DataBean> list) { this.list=list; Log.d(TAG, "showCartList:+++++++++++++++++++++++++++++++++++++++++++++++++ " + list.size()); myAdapter = new MyAdapter(MainActivity.this, list,this); expan_list_view.setAdapter(myAdapter); //展开字条吗 int groupCount = expan_list_view.getCount(); for (int i = 0; i < groupCount; i++) { expan_list_view.expandGroup(i); } } //显示总和 @Override public void showCount(String count) { sum.setText("总价是:" + count); } @Override public void onClick(View v) { switch (v.getId()){ //全选,反宣 case R.id.xuan: boolean checked = xuan.isChecked(); //只需要改变集合里面的数据,就可以了,然后刷新 for (int i = 0; i < list.size(); i++) { GoBean.DataBean dataBean = list.get(i); dataBean.setParentIsSelected(checked); //获得子集合,遍历 List<GoBean.ChildBean> list3 = dataBean.getList(); for (int j = 0; j < list3.size(); j++) { list3.get(j).setChildIsSelected(checked); } } //刷新即可 myAdapter.notifyDataSetChanged(); //计算 String count = SumUtils.sum(list); sum.setText("总价是:" + count); break; } } } ExpandableListView适配器----------------------------------------- public class MyAdapter extends BaseExpandableListAdapter{ private Context context; private List<GoBean.DataBean> list; private IView iView; public MyAdapter(Context context, List<GoBean.DataBean> list,IView iView) { this.context = context; this.list = list; this.iView=iView; } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int groupPosition) { return list.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return list.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return list.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 false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ParentViewHolder parentViewHolder; if (convertView == null) { convertView = View.inflate(context, R.layout.item_parent, null); CheckBox parent_cb = convertView.findViewById(R.id.parent_cb); TextView parent_title = convertView.findViewById(R.id.parent_title); parentViewHolder = new ParentViewHolder(parent_cb, parent_title); convertView.setTag(parentViewHolder); } else { parentViewHolder = (ParentViewHolder) convertView.getTag(); } //赋值 //Log.d(TAG, "getGroupView() returned: " + list.get(groupPosition).isParentIsSelected() + "---" + groupPosition); parentViewHolder.getParent_cb().setChecked(list.get(groupPosition).isParentIsSelected()); parentViewHolder.getParent_title().setText(list.get(groupPosition).getSellerName()); //checkbox的点击事件 parentViewHolder.getParent_cb().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean selected = list.get(groupPosition).isParentIsSelected(); selected = !selected; list.get(groupPosition).setParentIsSelected(selected); //点击父条目的复选框,子条目,相应的改变 // 将复选框的状态赋值给子复选框 List<GoBean.ChildBean> list1 = MyAdapter.this.list.get(groupPosition).getList(); for (int i = 0; i < list1.size(); i++) { GoBean.ChildBean childBean = list1.get(i); childBean.setChildIsSelected(selected); } //刷新 notifyDataSetChanged(); //计算 String sum = SumUtils.sum(list); iView.showCount(sum); } }); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { MyChildViewHolder myChildViewHolder; if (convertView == null) { convertView = View.inflate(context, R.layout.child_layout, null); CheckBox childCb = convertView.findViewById(R.id.child_cb); TextView childTitle = convertView.findViewById(R.id.child_title); ImageView childIcon = convertView.findViewById(R.id.child_icon); TextView childPrice = convertView.findViewById(R.id.child_price); AddSubView addSubView = convertView.findViewById(R.id.add_sub_view); myChildViewHolder = new MyChildViewHolder(childCb, childTitle, childPrice, addSubView, childIcon); convertView.setTag(myChildViewHolder); } else { myChildViewHolder = (MyChildViewHolder) convertView.getTag(); } //赋值 myChildViewHolder.getChildCb().setChecked(list.get(groupPosition).getList().get(childPosition).isChildIsSelected()); myChildViewHolder.getChildTitle().setText(list.get(groupPosition).getList().get(childPosition).getTitle()); myChildViewHolder.getChildPrice().setText(list.get(groupPosition).getList().get(childPosition).getPrice() + ""); myChildViewHolder.getAddSubView().setCount(list.get(groupPosition).getList().get(childPosition).getNum()); myChildViewHolder.getAddSubView().setOnAddClickListener(new AddSubView.AddClickListener() { @Override public void onAddClick(View view, int count) { list.get(groupPosition).getList().get(childPosition).setNum(count); //开始计算,如果选中了,就计算,没选中,就不计算 boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected(); //Log.d(TAG, "onAddClick() returned: " + "计算开始"); if (selected){ String sum = SumUtils.sum(list); //Log.d(TAG, "onAddClick() returned: " + sum); iView.showCount(sum); } } }); //减法 myChildViewHolder.getAddSubView().setOnSubClickListener(new AddSubView.SubClickListener() { @Override public void onSubClick(View view, int count) { list.get(groupPosition).getList().get(childPosition).setNum(count); boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected(); //Log.d(TAG, "onAddClick() returned: " + "计算开始"); if (selected){ String sum = SumUtils.sum(list); //Log.d(TAG, "onAddClick() returned: " + sum); iView.showCount(sum); } } }); String images = list.get(groupPosition).getList().get(childPosition).getImages(); String icon_url = images.split("\\|")[0]; Glide.with(context).load(icon_url).into(myChildViewHolder.getChildIcon()); myChildViewHolder.getChildCb().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected(); selected = !selected; list.get(groupPosition).getList().get(childPosition).setChildIsSelected(selected); //当所有的字条目被选中,父条目也要被选中。如果有一个字条目没有选中,父条目就不能选中 List<GoBean.ChildBean> list2 = MyAdapter.this.list.get(groupPosition).getList(); boolean flag = true; for (int j = 0; j < list2.size(); j++) { if (!list2.get(j).isChildIsSelected()) { flag = false; } } list.get(groupPosition).setParentIsSelected(flag); //刷新 notifyDataSetChanged(); //计算 String sum = SumUtils.sum(list); iView.showCount(sum); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } //父分组的ViewHolder class ParentViewHolder { private CheckBox parent_cb; private TextView parent_title; public ParentViewHolder(CheckBox parent_cb, TextView parent_title) { this.parent_cb = parent_cb; this.parent_title = parent_title; } public CheckBox getParent_cb() { return parent_cb; } public void setParent_cb(CheckBox parent_cb) { this.parent_cb = parent_cb; } public TextView getParent_title() { return parent_title; } public void setParent_title(TextView parent_title) { this.parent_title = parent_title; } } //创建字条目的ViewHolder class MyChildViewHolder { private CheckBox childCb; private TextView childTitle; private TextView childPrice; private AddSubView addSubView; private ImageView childIcon; public MyChildViewHolder(CheckBox childCb, TextView childTitle, TextView childPrice, AddSubView addSubView, ImageView childIcon) { this.childCb = childCb; this.childTitle = childTitle; this.childPrice = childPrice; this.addSubView = addSubView; this.childIcon = childIcon; } public CheckBox getChildCb() { return childCb; } public void setChildCb(CheckBox childCb) { this.childCb = childCb; } public TextView getChildTitle() { return childTitle; } public void setChildTitle(TextView childTitle) { this.childTitle = childTitle; } public TextView getChildPrice() { return childPrice; } public void setChildPrice(TextView childPrice) { this.childPrice = childPrice; } public AddSubView getAddSubView() { return addSubView; } public void setAddSubView(AddSubView addSubView) { this.addSubView = addSubView; } public ImageView getChildIcon() { return childIcon; } public void setChildIcon(ImageView childIcon) { this.childIcon = childIcon; } } } Presenter层--------------------------------------------------------- public class IPresentermpl implements IPresenter{ private static final String TAG = "IPresentermpl"; @Override public void showCartList(ICartModel iCartModel, final IView iView) { //?source=android&uid=71 Map<String,String> map=new HashMap<>(); map.put("uid","71"); iCartModel.getCartList(Httpfig.url, map, new GetCartListListener() { @Override public void getCartSuccess(String json) { Log.d(TAG, "getCartSuccess: "+json); Gson gson=new Gson(); GoBean goBean = gson.fromJson(json, GoBean.class); List<GoBean.DataBean> data = goBean.getData(); iView.showCartList(data); } @Override public void getCartError(String error) { Log.d(TAG, "getCartError: 失败+++++++++++++++++++++++++++++++++++++"); } }); } } Model层------------------------------------------------------------- public class ICartModelmpl implements ICartModel { private static final String TAG = "ICartModelmpl"; @Override public void getCartList(String url, Map<String, String> map, final GetCartListListener getCartListListener) { OKHttpUtils okHttpUtils=new OKHttpUtils(); okHttpUtils.okPost(url,map); okHttpUtils.setOnLoginListener(new OKHttpUtils.LoginListener() { @Override public void loginSuccess(String json) { Log.d(TAG, "loginSuccess: "+json); getCartListListener.getCartSuccess(json); } @Override public void loginError(String error) { Log.d(TAG, "loginSuccess:+++++++++++++++++++++++++++++失败 "+error); getCartListListener.getCartError(error); } }); } }
转载请注明原文地址: https://www.6miu.com/read-2650029.html

最新回复(0)