From 8f60fa3580cad6951369fec655c76bfc6e457184 Mon Sep 17 00:00:00 2001
From: GongJie <2542215481@qq.com>
Date: Sun, 14 May 2023 22:21:29 +0800
Subject: [PATCH] ex7
---
ShoppingCart-master/.gitignore | 14 +
ShoppingCart-master/.idea/.gitignore | 3 +
ShoppingCart-master/.idea/.name | 1 +
ShoppingCart-master/.idea/compiler.xml | 6 +
ShoppingCart-master/.idea/gradle.xml | 19 +
ShoppingCart-master/.idea/jarRepositories.xml | 30 ++
ShoppingCart-master/.idea/misc.xml | 10 +
ShoppingCart-master/app/.gitignore | 1 +
ShoppingCart-master/app/build.gradle | 50 +++
ShoppingCart-master/app/proguard-rules.pro | 21 +
.../com/llw/cart/ExampleInstrumentedTest.java | 27 ++
.../app/src/main/AndroidManifest.xml | 26 ++
.../main/java/com/llw/cart/MainActivity.java | 389 ++++++++++++++++++
.../com/llw/cart/adapter/GoodsAdapter.java | 49 +++
.../com/llw/cart/adapter/StoreAdapter.java | 155 +++++++
.../java/com/llw/cart/bean/CarResponse.java | 196 +++++++++
.../main/java/com/llw/cart/util/Constant.java | 95 +++++
.../java/com/llw/cart/util/GoodsCallback.java | 21 +
.../drawable-v24/ic_launcher_foreground.xml | 34 ++
.../src/main/res/drawable/bg_goods_num.xml | 5 +
.../res/drawable/bg_increase_goods_num.xml | 7 +
.../main/res/drawable/bg_reduce_goods_num.xml | 7 +
.../src/main/res/drawable/bg_settlement.xml | 8 +
.../app/src/main/res/drawable/bg_white_8.xml | 5 +
.../app/src/main/res/drawable/ic_check.xml | 10 +
.../app/src/main/res/drawable/ic_checked.xml | 10 +
.../res/drawable/ic_launcher_background.xml | 170 ++++++++
.../main/res/drawable/ic_shopping_cart.xml | 11 +
.../app/src/main/res/drawable/szss.jpg | Bin 0 -> 244198 bytes
.../app/src/main/res/layout/activity_main.xml | 204 +++++++++
.../app/src/main/res/layout/item_good.xml | 117 ++++++
.../app/src/main/res/layout/item_store.xml | 38 ++
.../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +
.../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +
.../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes
.../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes
.../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes
.../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes
.../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes
.../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes
.../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes
.../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes
.../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes
.../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes
.../app/src/main/res/values/colors.xml | 6 +
.../app/src/main/res/values/strings.xml | 3 +
.../app/src/main/res/values/styles.xml | 11 +
.../app/src/main/res/xml/network_config.xml | 4 +
.../java/com/llw/cart/ExampleUnitTest.java | 17 +
ShoppingCart-master/build.gradle | 28 ++
ShoppingCart-master/gradle.properties | 20 +
.../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes
.../gradle/wrapper/gradle-wrapper.properties | 6 +
ShoppingCart-master/gradlew | 172 ++++++++
ShoppingCart-master/gradlew.bat | 84 ++++
ShoppingCart-master/settings.gradle | 2 +
.../myapplication/CategoryActivity.java | 76 ++++
.../com/example/myapplication/MyAdapter.java | 64 +++
.../myapplication/SetDetailFragment.java | 30 ++
app/src/main/java/img.png | Bin 0 -> 21028 bytes
app/src/main/res/drawable/jt2.png | Bin 0 -> 11211 bytes
app/src/main/res/drawable/search.png | Bin 0 -> 2443 bytes
.../res/layout/category_detail_content.xml | 30 ++
app/src/main/res/layout/category_title.xml | 13 +
app/src/main/res/layout/content_category.xml | 43 ++
app/src/main/res/layout/user2_login.xml | 24 ++
66 files changed, 2382 insertions(+)
create mode 100644 ShoppingCart-master/.gitignore
create mode 100644 ShoppingCart-master/.idea/.gitignore
create mode 100644 ShoppingCart-master/.idea/.name
create mode 100644 ShoppingCart-master/.idea/compiler.xml
create mode 100644 ShoppingCart-master/.idea/gradle.xml
create mode 100644 ShoppingCart-master/.idea/jarRepositories.xml
create mode 100644 ShoppingCart-master/.idea/misc.xml
create mode 100644 ShoppingCart-master/app/.gitignore
create mode 100644 ShoppingCart-master/app/build.gradle
create mode 100644 ShoppingCart-master/app/proguard-rules.pro
create mode 100644 ShoppingCart-master/app/src/androidTest/java/com/llw/cart/ExampleInstrumentedTest.java
create mode 100644 ShoppingCart-master/app/src/main/AndroidManifest.xml
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/MainActivity.java
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/GoodsAdapter.java
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/StoreAdapter.java
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/bean/CarResponse.java
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/util/Constant.java
create mode 100644 ShoppingCart-master/app/src/main/java/com/llw/cart/util/GoodsCallback.java
create mode 100644 ShoppingCart-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/bg_goods_num.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/bg_increase_goods_num.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/bg_reduce_goods_num.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/bg_settlement.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/bg_white_8.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/ic_check.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/ic_checked.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/ic_launcher_background.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/ic_shopping_cart.xml
create mode 100644 ShoppingCart-master/app/src/main/res/drawable/szss.jpg
create mode 100644 ShoppingCart-master/app/src/main/res/layout/activity_main.xml
create mode 100644 ShoppingCart-master/app/src/main/res/layout/item_good.xml
create mode 100644 ShoppingCart-master/app/src/main/res/layout/item_store.xml
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-hdpi/ic_launcher.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-mdpi/ic_launcher.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xhdpi/ic_launcher.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
create mode 100644 ShoppingCart-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
create mode 100644 ShoppingCart-master/app/src/main/res/values/colors.xml
create mode 100644 ShoppingCart-master/app/src/main/res/values/strings.xml
create mode 100644 ShoppingCart-master/app/src/main/res/values/styles.xml
create mode 100644 ShoppingCart-master/app/src/main/res/xml/network_config.xml
create mode 100644 ShoppingCart-master/app/src/test/java/com/llw/cart/ExampleUnitTest.java
create mode 100644 ShoppingCart-master/build.gradle
create mode 100644 ShoppingCart-master/gradle.properties
create mode 100644 ShoppingCart-master/gradle/wrapper/gradle-wrapper.jar
create mode 100644 ShoppingCart-master/gradle/wrapper/gradle-wrapper.properties
create mode 100644 ShoppingCart-master/gradlew
create mode 100644 ShoppingCart-master/gradlew.bat
create mode 100644 ShoppingCart-master/settings.gradle
create mode 100644 app/src/main/java/com/example/myapplication/CategoryActivity.java
create mode 100644 app/src/main/java/com/example/myapplication/MyAdapter.java
create mode 100644 app/src/main/java/com/example/myapplication/SetDetailFragment.java
create mode 100644 app/src/main/java/img.png
create mode 100644 app/src/main/res/drawable/jt2.png
create mode 100644 app/src/main/res/drawable/search.png
create mode 100644 app/src/main/res/layout/category_detail_content.xml
create mode 100644 app/src/main/res/layout/category_title.xml
create mode 100644 app/src/main/res/layout/content_category.xml
diff --git a/ShoppingCart-master/.gitignore b/ShoppingCart-master/.gitignore
new file mode 100644
index 0000000..603b140
--- /dev/null
+++ b/ShoppingCart-master/.gitignore
@@ -0,0 +1,14 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
diff --git a/ShoppingCart-master/.idea/.gitignore b/ShoppingCart-master/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/ShoppingCart-master/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/ShoppingCart-master/.idea/.name b/ShoppingCart-master/.idea/.name
new file mode 100644
index 0000000..66c675e
--- /dev/null
+++ b/ShoppingCart-master/.idea/.name
@@ -0,0 +1 @@
+ShoppingCart
\ No newline at end of file
diff --git a/ShoppingCart-master/.idea/compiler.xml b/ShoppingCart-master/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/ShoppingCart-master/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/.idea/gradle.xml b/ShoppingCart-master/.idea/gradle.xml
new file mode 100644
index 0000000..a2d7c21
--- /dev/null
+++ b/ShoppingCart-master/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/.idea/jarRepositories.xml b/ShoppingCart-master/.idea/jarRepositories.xml
new file mode 100644
index 0000000..ea0f72c
--- /dev/null
+++ b/ShoppingCart-master/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/.idea/misc.xml b/ShoppingCart-master/.idea/misc.xml
new file mode 100644
index 0000000..bdd9278
--- /dev/null
+++ b/ShoppingCart-master/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/.gitignore b/ShoppingCart-master/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/ShoppingCart-master/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/ShoppingCart-master/app/build.gradle b/ShoppingCart-master/app/build.gradle
new file mode 100644
index 0000000..1e03ff2
--- /dev/null
+++ b/ShoppingCart-master/app/build.gradle
@@ -0,0 +1,50 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.2"
+ defaultConfig {
+ applicationId "com.llw.cart"
+ minSdkVersion 21
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+
+ //Gson解析
+ implementation 'com.google.code.gson:gson:2.8.6'
+ //RecyclerView
+ implementation 'androidx.recyclerview:recyclerview:1.1.0'
+ //RecyclerView的好搭档
+ implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47'
+ //热门强大的图片加载器
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
+ //下拉刷新框架
+ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
+ //没有使用特殊Header,可以不加这行
+ implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'
+
+
+
+}
diff --git a/ShoppingCart-master/app/proguard-rules.pro b/ShoppingCart-master/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/ShoppingCart-master/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/ShoppingCart-master/app/src/androidTest/java/com/llw/cart/ExampleInstrumentedTest.java b/ShoppingCart-master/app/src/androidTest/java/com/llw/cart/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..c207018
--- /dev/null
+++ b/ShoppingCart-master/app/src/androidTest/java/com/llw/cart/ExampleInstrumentedTest.java
@@ -0,0 +1,27 @@
+package com.llw.cart;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
+ assertEquals("com.llw.cart", appContext.getPackageName());
+ }
+}
diff --git a/ShoppingCart-master/app/src/main/AndroidManifest.xml b/ShoppingCart-master/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..86e0ca1
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/MainActivity.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/MainActivity.java
new file mode 100644
index 0000000..d47bafc
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/MainActivity.java
@@ -0,0 +1,389 @@
+package com.llw.cart;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.annotation.SuppressLint;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.google.gson.Gson;
+import com.llw.cart.adapter.StoreAdapter;
+import com.llw.cart.bean.CarResponse;
+import com.llw.cart.util.Constant;
+import com.llw.cart.util.GoodsCallback;
+import com.scwang.smartrefresh.layout.SmartRefreshLayout;
+import com.scwang.smartrefresh.layout.api.RefreshLayout;
+import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购物车
+ *
+ * @author llw
+ */
+public class MainActivity extends AppCompatActivity implements GoodsCallback, View.OnClickListener {
+
+ public static final String TAG = "MainActivity";
+
+ private RecyclerView rvStore;
+ private StoreAdapter storeAdapter;
+ private List mList = new ArrayList<>();
+ private TextView tvEdit;//编辑
+ private ImageView ivCheckedAll;//全选
+ private TextView tvTotal;//合计价格
+ private TextView tvSettlement;//结算
+ private LinearLayout layEdit;//编辑底部布局
+ private TextView tvShareGoods;//分享商品
+ private TextView tvCollectGoods;//收藏商品
+ private TextView tvDeleteGoods;//删除商品
+
+ private boolean isEdit = false;//是否编辑
+ private boolean isAllChecked = false;//是否全选
+
+ private List shopIdList = new ArrayList<>();//店铺列表
+
+ private double totalPrice = 0.00;//商品总价
+ private int totalCount = 0;//商品总数量
+
+ private AlertDialog dialog;//弹窗
+
+ private boolean isHaveGoods = false;//购物车是否有商品
+
+ private SmartRefreshLayout refresh;//刷新布局
+ private LinearLayout layEmpty;//空布局
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ initView();
+ }
+
+ /**
+ * 初始化
+ */
+ private void initView() {
+ //设置亮色状态栏模式 systemUiVisibility在Android11中弃用了,可以尝试一下。
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+
+ rvStore = findViewById(R.id.rv_store);
+ tvEdit = findViewById(R.id.tv_edit);
+ ivCheckedAll = findViewById(R.id.iv_checked_all);
+ tvTotal = findViewById(R.id.tv_total);
+ tvSettlement = findViewById(R.id.tv_settlement);
+ layEdit = findViewById(R.id.lay_edit);
+ tvShareGoods = findViewById(R.id.tv_share_goods);
+ tvCollectGoods = findViewById(R.id.tv_collect_goods);
+ tvDeleteGoods = findViewById(R.id.tv_delete_goods);
+ refresh = findViewById(R.id.refresh);
+ layEmpty = findViewById(R.id.lay_empty);
+ //禁用下拉刷新和上拉加载更多
+ refresh.setEnableRefresh(false);
+ refresh.setEnableLoadMore(false);
+ //下拉刷新监听
+ refresh.setOnRefreshListener(refreshLayout -> initView());
+
+ tvEdit.setOnClickListener(this);
+ ivCheckedAll.setOnClickListener(this);
+ tvSettlement.setOnClickListener(this);
+ tvShareGoods.setOnClickListener(this);
+ tvCollectGoods.setOnClickListener(this);
+ tvDeleteGoods.setOnClickListener(this);
+
+ CarResponse carResponse = new Gson().fromJson(Constant.CAR_JSON, CarResponse.class);
+
+ mList.addAll(carResponse.getOrderData());
+ storeAdapter = new StoreAdapter(R.layout.item_store, mList, this);
+ rvStore.setLayoutManager(new LinearLayoutManager(this));
+ rvStore.setAdapter(storeAdapter);
+ //店铺点击
+ storeAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
+ @Override
+ public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
+ CarResponse.OrderDataBean storeBean = mList.get(position);
+ if (view.getId() == R.id.iv_checked_store) {
+ storeBean.setChecked(!storeBean.isChecked());
+ storeAdapter.notifyDataSetChanged();
+ //传递选中店铺的id
+ if (storeBean.isChecked()) {
+ //全选商品
+ storeAdapter.controlGoods(storeBean.getShopId(), true);
+
+ //添加到列表中
+ if (!shopIdList.contains(storeBean.getShopId())) {
+ //如果列表中没有这个店铺Id且当前店铺为选中状态
+ shopIdList.add(storeBean.getShopId());
+ }
+ } else {
+ //清除全选商品
+ storeAdapter.controlGoods(storeBean.getShopId(), false);
+
+ //从列表中清除
+ if (shopIdList.contains(storeBean.getShopId())) {
+ shopIdList.remove((Integer) storeBean.getShopId());
+ }
+ }
+ //控制页面全选
+ controlAllChecked();
+ }
+ }
+ });
+ //有商品
+ isHaveGoods = true;
+ //下拉加载数据完成后,关闭下拉刷新动画
+ refresh.finishRefresh();
+ //隐藏布局
+ layEmpty.setVisibility(View.GONE);
+ }
+
+ /**
+ * 控制页面全选 与页面全选进行交互
+ */
+ private void controlAllChecked() {
+ if (shopIdList.size() == mList.size() && mList.size() != 0) {
+ //全选
+ ivCheckedAll.setImageDrawable(getDrawable(R.drawable.ic_checked));
+ isAllChecked = true;
+ } else {
+ //不全选
+ ivCheckedAll.setImageDrawable(getDrawable(R.drawable.ic_check));
+ isAllChecked = false;
+ }
+ //计算价格
+ calculationPrice();
+ }
+
+ /**
+ * 选中店铺
+ *
+ * @param shopId 店铺id
+ */
+ @Override
+ public void checkedStore(int shopId, boolean state) {
+ for (CarResponse.OrderDataBean bean : mList) {
+ //遍历
+ if (shopId == bean.getShopId()) {
+ bean.setChecked(state);
+ storeAdapter.notifyDataSetChanged();
+ //记录选中店铺的shopid,添加到一个列表中。
+ if (!shopIdList.contains(bean.getShopId()) && state) {
+ //如果列表中没有这个店铺Id且当前店铺为选中状态
+ shopIdList.add(bean.getShopId());
+ } else {
+ if (shopIdList.contains(bean.getShopId())) {
+ //通过list.indexOf获取属性的在列表中的下标,不过强转Integer更简洁
+ shopIdList.remove((Integer) bean.getShopId());
+ }
+ }
+ }
+ }
+ //控制页面全选
+ controlAllChecked();
+ }
+
+
+ /**
+ * 商品价格
+ */
+ @Override
+ public void calculationPrice() {
+ //每次计算之前先置零
+ totalPrice = 0.00;
+ totalCount = 0;
+ //循环购物车中的店铺列表
+ for (int i = 0; i < mList.size(); i++) {
+ CarResponse.OrderDataBean orderDataBean = mList.get(i);
+ //循环店铺中的商品列表
+ for (int j = 0; j < orderDataBean.getCartlist().size(); j++) {
+ CarResponse.OrderDataBean.CartlistBean cartlistBean = orderDataBean.getCartlist().get(j);
+ //当有选中商品时计算数量和价格
+ if (cartlistBean.isChecked()) {
+ totalCount++;
+ totalPrice += cartlistBean.getPrice() * cartlistBean.getCount();
+ }
+ }
+ }
+ tvTotal.setText("¥" + totalPrice);
+ tvSettlement.setText(totalCount == 0 ? "结算" : "结算(" + totalCount + ")");
+ }
+
+ /**
+ * 页面控件点击事件
+ *
+ * @param v
+ */
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.tv_edit://编辑
+ if (!isHaveGoods) {
+ showMsg("当前购物车空空如也~");
+ return;
+ }
+ if (isEdit) {
+ tvEdit.setText("编辑");
+ layEdit.setVisibility(View.GONE);
+ isEdit = false;
+ } else {
+ tvEdit.setText("完成");
+ layEdit.setVisibility(View.VISIBLE);
+ isEdit = true;
+ }
+ break;
+ case R.id.iv_checked_all://全选
+ if (!isHaveGoods) {
+ showMsg("当前购物车空空如也~");
+ return;
+ }
+ if (isAllChecked) {
+ //取消全选
+ isSelectAllStore(false);
+ } else {
+ //全选
+ isSelectAllStore(true);
+ }
+ break;
+ case R.id.tv_settlement://结算
+ if (!isHaveGoods) {
+ showMsg("当前购物车空空如也~");
+ return;
+ }
+ if (totalCount == 0) {
+ showMsg("请选择要结算的商品");
+ return;
+ }
+ //弹窗
+ dialog = new AlertDialog.Builder(this)
+ .setMessage("总计:" + totalCount + "种商品," + totalPrice + "元")
+ .setPositiveButton("确定", (dialog, which) -> deleteGoods())
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create();
+ dialog.show();
+ break;
+ case R.id.tv_delete_goods://删除
+ if (totalCount == 0) {
+ showMsg("请选择要删除的商品");
+ return;
+ }
+ //弹窗
+ dialog = new AlertDialog.Builder(this)
+ .setMessage("确定要删除所选商品吗?")
+ .setPositiveButton("确定", (dialog, which) -> deleteGoods())
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create();
+ dialog.show();
+ break;
+ case R.id.tv_collect_goods://收藏
+ if (totalCount == 0) {
+ showMsg("请选择要收藏的商品");
+ return;
+ }
+ showMsg("收藏成功!");
+ break;
+ case R.id.tv_share_goods://分享
+ if (totalCount == 0) {
+ showMsg("请选择要分享的商品");
+ return;
+ }
+ showMsg("分享成功!");
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 删除商品
+ */
+ private void deleteGoods() {
+ //店铺列表
+ List storeList = new ArrayList<>();
+
+ for (int i = 0; i < mList.size(); i++) {
+ CarResponse.OrderDataBean store = mList.get(i);
+ if (store.isChecked()) {
+ //店铺如果选择则添加到此列表中
+ storeList.add(store);
+ }
+ //商品列表
+ List goodsList = new ArrayList<>();
+
+ List goods = store.getCartlist();
+ //循环店铺中的商品列表
+ for (int j = 0; j < goods.size(); j++) {
+ CarResponse.OrderDataBean.CartlistBean cartlistBean = goods.get(j);
+ //当有选中商品时添加到此列表中
+ if (cartlistBean.isChecked()) {
+ goodsList.add(cartlistBean);
+ }
+ }
+ //删除商品
+ goods.removeAll(goodsList);
+ }
+ //删除店铺
+ mList.removeAll(storeList);
+
+ shopIdList.clear();//删除了选中商品,清空已选择的标识
+ controlAllChecked();//控制去全选
+ //改变界面UI
+ tvEdit.setText("编辑");
+ layEdit.setVisibility(View.GONE);
+ isEdit = false;
+ //刷新数据
+ storeAdapter.notifyDataSetChanged();
+ if (mList.size() <= 0) {
+ //无商品
+ isHaveGoods = false;
+ //启用下拉刷新
+ refresh.setEnableRefresh(true);
+ //显示空布局
+ layEmpty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * 是否全选
+ *
+ * @param state 状态
+ */
+ private void isSelectAllStore(boolean state) {
+ //修改背景
+ ivCheckedAll.setImageDrawable(getDrawable(state ? R.drawable.ic_checked : R.drawable.ic_check));
+
+ for (CarResponse.OrderDataBean orderDataBean : mList) {
+ //商品是否选中
+ storeAdapter.controlGoods(orderDataBean.getShopId(), state);
+ //店铺是否选中
+ checkedStore(orderDataBean.getShopId(), state);
+ }
+ isAllChecked = state;
+ }
+
+ /**
+ * Toast提示
+ *
+ * @param msg
+ */
+ private void showMsg(String msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
+ }
+
+
+}
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/GoodsAdapter.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/GoodsAdapter.java
new file mode 100644
index 0000000..8e84b62
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/GoodsAdapter.java
@@ -0,0 +1,49 @@
+package com.llw.cart.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.Glide;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.llw.cart.bean.CarResponse;
+import com.llw.cart.R;
+
+import java.util.List;
+
+/**
+ * 商品适配器
+ *
+ * @author llw
+ */
+public class GoodsAdapter extends BaseQuickAdapter {
+
+ public GoodsAdapter(int layoutResId, @Nullable List data) {
+ super(layoutResId, data);
+ }
+
+ @Override
+ protected void convert(BaseViewHolder helper, CarResponse.OrderDataBean.CartlistBean item) {
+ helper.setText(R.id.tv_good_name, item.getProductName())
+ .setText(R.id.tv_good_color, item.getColor())
+ .setText(R.id.tv_good_size, item.getSize())
+ .setText(R.id.tv_goods_price, item.getPrice() + "")
+ .setText(R.id.tv_goods_num, item.getCount() + "");
+ ImageView goodImg = helper.getView(R.id.iv_goods);
+ Glide.with(mContext).load(item.getDefaultPic()).into(goodImg);
+
+ ImageView checkedGoods = helper.getView(R.id.iv_checked_goods);
+ //判断商品是否选中
+ if (item.isChecked()) {
+ checkedGoods.setImageDrawable(mContext.getDrawable(R.drawable.ic_checked));
+ } else {
+ checkedGoods.setImageDrawable(mContext.getDrawable(R.drawable.ic_check));
+ }
+ //添加点击事件
+ helper.addOnClickListener(R.id.iv_checked_goods)//选中商品
+ .addOnClickListener(R.id.tv_increase_goods_num)//增加商品
+ .addOnClickListener(R.id.tv_reduce_goods_num);//减少商品
+ }
+}
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/StoreAdapter.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/StoreAdapter.java
new file mode 100644
index 0000000..bf4d4c6
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/adapter/StoreAdapter.java
@@ -0,0 +1,155 @@
+package com.llw.cart.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.llw.cart.MainActivity;
+import com.llw.cart.bean.CarResponse;
+import com.llw.cart.R;
+import com.llw.cart.util.GoodsCallback;
+
+import java.util.List;
+
+/**
+ * 店铺适配器
+ *
+ * @author llw
+ */
+public class StoreAdapter extends BaseQuickAdapter {
+
+ private RecyclerView rvGood;
+ //商品回调
+ private GoodsCallback goodsCallback;
+ //店铺对象
+ private List storeBean;
+
+ public StoreAdapter(int layoutResId, @Nullable List data, GoodsCallback goodsCallback) {
+ super(layoutResId, data);
+ this.goodsCallback = goodsCallback;
+ storeBean = data;//赋值
+ }
+
+ @Override
+ protected void convert(BaseViewHolder helper, final CarResponse.OrderDataBean item) {
+
+ rvGood = helper.getView(R.id.rv_goods);
+ helper.setText(R.id.tv_store_name, item.getShopName());
+
+ ImageView checkedStore = helper.getView(R.id.iv_checked_store);
+ if (item.isChecked()) {
+ checkedStore.setImageDrawable(mContext.getDrawable(R.drawable.ic_checked));
+ } else {
+ checkedStore.setImageDrawable(mContext.getDrawable(R.drawable.ic_check));
+ }
+ //点击事件
+ helper.addOnClickListener(R.id.iv_checked_store);//选中店铺
+
+
+ final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.item_good, item.getCartlist());
+ rvGood.setLayoutManager(new LinearLayoutManager(mContext));
+ rvGood.setAdapter(goodsAdapter);
+
+ //商品item中的点击事件
+ goodsAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
+ @Override
+ public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
+ CarResponse.OrderDataBean.CartlistBean goodsBean = item.getCartlist().get(position);
+
+ switch (view.getId()) {
+ case R.id.iv_checked_goods://选中商品
+ //如果已选中则取消选中,未选中则选中
+ goodsBean.setChecked(!goodsBean.isChecked());
+ //刷新适配器
+ goodsAdapter.notifyDataSetChanged();
+ //控制店铺是否选中
+ controlStore(item);
+ //商品控制价格
+ goodsCallback.calculationPrice();
+ break;
+ case R.id.tv_increase_goods_num://增加商品数量
+ updateGoodsNum(goodsBean, goodsAdapter,true);
+ break;
+ case R.id.tv_reduce_goods_num://减少商品数量
+ updateGoodsNum(goodsBean, goodsAdapter,false);
+ break;
+ default:
+ break;
+ }
+ }
+ });
+
+ }
+
+ /**
+ * 修改商品数量 增加或者减少
+ * @param goodsBean
+ * @param goodsAdapter
+ * @param state true增加 false减少
+ */
+ private void updateGoodsNum(CarResponse.OrderDataBean.CartlistBean goodsBean, GoodsAdapter goodsAdapter,boolean state) {
+ //其实商品应该还有一个库存值或者其他的限定值,我这里写一个假的库存值为10
+ int inventory = 10;
+ int count = goodsBean.getCount();
+
+ if(state){
+ if (count >= inventory){
+ Toast.makeText(mContext,"商品数量不可超过库存值~",Toast.LENGTH_SHORT).show();
+ return;
+ }
+ count++;
+ }else {
+ if (count <= 1){
+ Toast.makeText(mContext,"已是最低商品数量~",Toast.LENGTH_SHORT).show();
+ return;
+ }
+ count--;
+ }
+ goodsBean.setCount(count);//设置商品数量
+ //刷新适配器
+ goodsAdapter.notifyDataSetChanged();
+ //计算商品价格
+ goodsCallback.calculationPrice();
+ }
+
+ /**
+ * 控制店铺是否选中
+ */
+ private void controlStore(CarResponse.OrderDataBean item) {
+ int num = 0;
+ for (CarResponse.OrderDataBean.CartlistBean bean : item.getCartlist()) {
+ if (bean.isChecked()) {
+ ++num;
+ }
+ }
+ if (num == item.getCartlist().size()) {
+ //全选中 传递需要选中的店铺的id过去
+ goodsCallback.checkedStore(item.getShopId(), true);
+ } else {
+ goodsCallback.checkedStore(item.getShopId(), false);
+ }
+ }
+
+ /**
+ * 控制商品是否选中
+ */
+ public void controlGoods(int shopId, boolean state) {
+ //根据店铺id选中该店铺下所有商品
+ for (CarResponse.OrderDataBean orderDataBean : storeBean) {
+ //店铺id等于传递过来的店铺id 则选中该店铺下所有商品
+ if (orderDataBean.getShopId() == shopId) {
+ for (CarResponse.OrderDataBean.CartlistBean cartlistBean : orderDataBean.getCartlist()) {
+ cartlistBean.setChecked(state);
+ //刷新
+ notifyDataSetChanged();
+ }
+ }
+ }
+ }
+}
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/bean/CarResponse.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/bean/CarResponse.java
new file mode 100644
index 0000000..236bb79
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/bean/CarResponse.java
@@ -0,0 +1,196 @@
+package com.llw.cart.bean;
+
+import java.util.List;
+
+/**
+ * 购物车返回数据
+ * @author llw
+ */
+public class CarResponse {
+
+
+ /**
+ * code : 200
+ * orderData : [{"shopId":1,"shopName":"京东自营","cartlist":[{"id":1,"shopId":1,"shopName":"京东自营","defaultPic":"https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg","productId":1,"productName":"三只松鼠_零食大礼包","color":"黑色","size":"18L","price":20,"count":1},{"id":2,"shopId":1,"shopName":"京东自营","defaultPic":"https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg","productId":2,"productName":"小米心跳手环","color":"白色","size":"20XXL","price":148,"count":1}]},{"shopId":2,"shopName":"海澜之家","cartlist":[{"id":1,"shopId":2,"shopName":"海澜之家","defaultPic":"https://img30.360buyimg.com/popWaterMark/jfs/t4075/83/1343091204/132469/9034cb9c/5873496bN68020ba8.jpg","productId":1,"productName":"短袖T恤男 2017夏季新品","color":"蓝色","size":"30X","price":181,"count":1}]},{"shopId":3,"shopName":"OPPO官方旗舰店","cartlist":[{"id":1,"shopId":3,"shopName":"OPPO官方旗舰店","defaultPic":"https://img10.360buyimg.com/cms/jfs/t6064/272/2163314583/157700/442d6477/593c1c49N7c63a7d9.jpg","productId":1,"productName":"OPPO R11 全网通","color":"蓝色","size":"30X","price":1999,"count":1},{"id":2,"shopId":3,"shopName":"OPPO官方旗舰店","defaultPic":"https://img14.360buyimg.com/n0/jfs/t3142/194/4953241722/254855/1651c2b1/585b9021Nf653e48a.jpg","productId":1,"productName":"OPPO R9 全网通","color":"蓝色","size":"30X","price":999,"count":1}]}]
+ */
+
+
+ private int code;
+ private List orderData;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public List getOrderData() {
+ return orderData;
+ }
+
+ public void setOrderData(List orderData) {
+ this.orderData = orderData;
+ }
+
+ public static class OrderDataBean {
+ /**
+ * shopId : 1
+ * shopName : 京东自营
+ * cartlist : [{"id":1,"shopId":1,"shopName":"京东自营","defaultPic":"https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg","productId":1,"productName":"三只松鼠_零食大礼包","color":"黑色","size":"18L","price":20,"count":1},{"id":2,"shopId":1,"shopName":"京东自营","defaultPic":"https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg","productId":2,"productName":"小米心跳手环","color":"白色","size":"20XXL","price":148,"count":1}]
+ */
+
+ private int shopId;
+ private String shopName;
+ private List cartlist;
+ private boolean isChecked;//店铺是否选中
+
+ public int getShopId() {
+ return shopId;
+ }
+
+ public void setShopId(int shopId) {
+ this.shopId = shopId;
+ }
+
+ public String getShopName() {
+ return shopName;
+ }
+
+ public void setShopName(String shopName) {
+ this.shopName = shopName;
+ }
+
+ public List getCartlist() {
+ return cartlist;
+ }
+
+ public void setCartlist(List cartlist) {
+ this.cartlist = cartlist;
+ }
+
+ public boolean isChecked() {
+ return isChecked;
+ }
+
+ public void setChecked(boolean checked) {
+ isChecked = checked;
+ }
+
+ public static class CartlistBean {
+ /**
+ * id : 1
+ * shopId : 1
+ * shopName : 京东自营
+ * defaultPic : https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg
+ * productId : 1
+ * productName : 三只松鼠_零食大礼包
+ * color : 黑色
+ * size : 18L
+ * price : 20
+ * count : 1
+ */
+
+ private int id;
+ private int shopId;
+ private String shopName;
+ private String defaultPic;
+ private int productId;
+ private String productName;
+ private String color;
+ private String size;
+ private int price;
+ private int count;
+ private boolean isChecked;//商品是否选中
+
+ public boolean isChecked() {
+ return isChecked;
+ }
+
+ public void setChecked(boolean checked) {
+ isChecked = checked;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getShopId() {
+ return shopId;
+ }
+
+ public void setShopId(int shopId) {
+ this.shopId = shopId;
+ }
+
+ public String getShopName() {
+ return shopName;
+ }
+
+ public void setShopName(String shopName) {
+ this.shopName = shopName;
+ }
+
+ public String getDefaultPic() {
+ return defaultPic;
+ }
+
+ public void setDefaultPic(String defaultPic) {
+ this.defaultPic = defaultPic;
+ }
+
+ public int getProductId() {
+ return productId;
+ }
+
+ public void setProductId(int productId) {
+ this.productId = productId;
+ }
+
+ public String getProductName() {
+ return productName;
+ }
+
+ public void setProductName(String productName) {
+ this.productName = productName;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+ }
+ }
+}
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/util/Constant.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/util/Constant.java
new file mode 100644
index 0000000..88fcc7d
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/util/Constant.java
@@ -0,0 +1,95 @@
+package com.llw.cart.util;
+
+/**
+ * 常量
+ * @author llw
+ */
+public class Constant {
+
+ public static final String CAR_JSON = "{ \"code\" : 200 ,\n" +
+ " \"orderData\" : [\n" +
+ " {\n" +
+ "\n" +
+ " \"shopId\": 1,\n" +
+ " \"shopName\":\"水果拼盘\",\n" +
+ " \"cartlist\": [\n" +
+ " {\n" +
+ " \"id\": 1,\n" +
+ " \"shopId\": 1,\n" +
+ " \"shopName\": \"水果拼盘\",\n" +
+ " \"defaultPic\": \"https://tse1-mm.cn.bing.net/th/id/OIP-C.vJftgCb8g6v_gSHsD5HGNgHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7\",\n" +
+ " \"productId\": 1,\n" +
+ " \"productName\": \"优质新鲜水果\",\n" +
+ " \"color\": \"\",\n" +
+ " \"size\": \"\",\n" +
+ " \"price\": 25,\n" +
+ " \"count\":1\n" +
+ " },\n" +
+ " {\n" +
+ " \"id\": 2,\n" +
+ " \"shopId\": 1,\n" +
+ " \"shopName\": \"\",\n" +
+ " \"defaultPic\": \"https://tse4-mm.cn.bing.net/th/id/OIP-C.L32QENiAMoSmmqLf1Ks2BgHaFS?w=288&h=206&c=7&r=0&o=5&pid=1.7\",\n" +
+ " \"productId\": 2,\n" +
+ " \"productName\": \"花彩拼盘\",\n" +
+ " \"color\": \"\",\n" +
+ " \"size\": \"\",\n" +
+ " \"price\": 16,\n" +
+ " \"count\": 1\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ,\n" +
+ " {\n" +
+ " \"shopId\": 2,\n" +
+ " \"shopName\":\"水果奶茶\",\n" +
+ " \"cartlist\": [\n" +
+ " {\n" +
+ " \"id\": 1,\n" +
+ " \"shopId\": 2,\n" +
+ " \"shopName\": \"水果奶茶\",\n" +
+ " \"defaultPic\": \"https://tse4-mm.cn.bing.net/th/id/OIP-C.THBnn4_4YiWfbtKTlzdZawHaLG?w=199&h=298&c=7&r=0&o=5&pid=1.7\",\n" +
+ " \"productId\": 1,\n" +
+ " \"productName\": \"青柠芒果\",\n" +
+ " \"color\": \"\",\n" +
+ " \"size\": \"\",\n" +
+ " \"price\": 15,\n" +
+ " \"count\":1\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ,\n" +
+ " {\n" +
+ " \"shopId\": 3,\n" +
+ " \"shopName\":\"水果蛋糕\",\n" +
+ " \"cartlist\": [\n" +
+ " {\n" +
+ " \"id\": 1,\n" +
+ " \"shopId\": 3,\n" +
+ " \"shopName\": \"水果蛋糕\",\n" +
+ " \"defaultPic\": \"https://tse1-mm.cn.bing.net/th/id/OIP-C.-MylYp2cdCyNM5ijjLQqSwHaHa?w=192&h=191&c=7&r=0&o=5&pid=1.7\",\n" +
+ " \"productId\": 1,\n" +
+ " \"productName\": \"多彩水果拼盘蛋糕\",\n" +
+ " \"color\": \"\",\n" +
+ " \"size\": \"\",\n" +
+ " \"price\": 50,\n" +
+ " \"count\":1\n" +
+ " },\n" +
+ " {\n" +
+ " \"id\": 2,\n" +
+ " \"shopId\": 3,\n" +
+ " \"shopName\": \"水果蛋糕\",\n" +
+ " \"defaultPic\": \"https://tse1-mm.cn.bing.net/th/id/OIP-C.GFSAz_9r7WIXWpGCo72K3AHaGv?w=218&h=199&c=7&r=0&o=5&pid=1.7\",\n" +
+ " \"productId\": 1,\n" +
+ " \"productName\": \"心动情人草莓蛋糕\",\n" +
+ " \"color\": \"\",\n" +
+ " \"size\": \"\",\n" +
+ " \"price\": 68,\n" +
+ " \"count\":1\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ "\n" +
+ " ]\n" +
+ "}";
+}
diff --git a/ShoppingCart-master/app/src/main/java/com/llw/cart/util/GoodsCallback.java b/ShoppingCart-master/app/src/main/java/com/llw/cart/util/GoodsCallback.java
new file mode 100644
index 0000000..7e52b75
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/java/com/llw/cart/util/GoodsCallback.java
@@ -0,0 +1,21 @@
+package com.llw.cart.util;
+
+
+/**
+ * 商品回调接口
+ * @author llw
+ */
+public interface GoodsCallback {
+
+ /**
+ * 选中店铺
+ * @param shopId 店铺id
+ * @param state 是否选中
+ */
+ void checkedStore(int shopId,boolean state);
+
+ /**
+ * 计算价格
+ */
+ void calculationPrice();
+}
diff --git a/ShoppingCart-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/ShoppingCart-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..1f6bb29
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ShoppingCart-master/app/src/main/res/drawable/bg_goods_num.xml b/ShoppingCart-master/app/src/main/res/drawable/bg_goods_num.xml
new file mode 100644
index 0000000..7ef60a2
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/bg_goods_num.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/res/drawable/bg_increase_goods_num.xml b/ShoppingCart-master/app/src/main/res/drawable/bg_increase_goods_num.xml
new file mode 100644
index 0000000..d049da2
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/bg_increase_goods_num.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/res/drawable/bg_reduce_goods_num.xml b/ShoppingCart-master/app/src/main/res/drawable/bg_reduce_goods_num.xml
new file mode 100644
index 0000000..f071253
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/bg_reduce_goods_num.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/res/drawable/bg_settlement.xml b/ShoppingCart-master/app/src/main/res/drawable/bg_settlement.xml
new file mode 100644
index 0000000..be029bd
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/bg_settlement.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/res/drawable/bg_white_8.xml b/ShoppingCart-master/app/src/main/res/drawable/bg_white_8.xml
new file mode 100644
index 0000000..5adf7f0
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/bg_white_8.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShoppingCart-master/app/src/main/res/drawable/ic_check.xml b/ShoppingCart-master/app/src/main/res/drawable/ic_check.xml
new file mode 100644
index 0000000..c3f13f5
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/ic_check.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/ShoppingCart-master/app/src/main/res/drawable/ic_checked.xml b/ShoppingCart-master/app/src/main/res/drawable/ic_checked.xml
new file mode 100644
index 0000000..9d7471b
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/ic_checked.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/ShoppingCart-master/app/src/main/res/drawable/ic_launcher_background.xml b/ShoppingCart-master/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..0d025f9
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ShoppingCart-master/app/src/main/res/drawable/ic_shopping_cart.xml b/ShoppingCart-master/app/src/main/res/drawable/ic_shopping_cart.xml
new file mode 100644
index 0000000..6c489be
--- /dev/null
+++ b/ShoppingCart-master/app/src/main/res/drawable/ic_shopping_cart.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/ShoppingCart-master/app/src/main/res/drawable/szss.jpg b/ShoppingCart-master/app/src/main/res/drawable/szss.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7781eddc310e39c53425e4c031c7f5c2e5391582
GIT binary patch
literal 244198
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