diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/AddOrDelView.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/AddOrDelView.java
new file mode 100644
index 0000000..6ae3737
--- /dev/null
+++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/AddOrDelView.java
@@ -0,0 +1,78 @@
+package com.sucstepsoft.cm_utils.core.widget.views;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+
+import com.sucstepsoft.cm_utils.R;
+
+public class AddOrDelView extends LinearLayout {
+ private OnAddDelClickListener listener;
+ private EditText et_number;
+
+ public interface OnAddDelClickListener {
+ void onAddClick(View v);
+
+ void onDelClick(View v);
+ }
+
+ public AddOrDelView(Context context) {
+ this(context, null);
+ }
+
+ public AddOrDelView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public AddOrDelView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context, attrs, defStyleAttr);
+ }
+
+ private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
+ View.inflate(context, R.layout.layout_add_delete, this);
+ ImageView but_add = findViewById(R.id.iv_add);
+ ImageView but_delete = findViewById(R.id.iv_del);
+ et_number = findViewById(R.id.et_number);
+
+ //释放资源 typedArray.recycle();
+ but_add.setOnClickListener(view -> listener.onAddClick(view));
+ but_delete.setOnClickListener(view -> listener.onDelClick(view));
+ }
+
+ /**
+ * 对外提供设置EditText值的方法
+ */
+ public void setNumber(int number) {
+ if (number > 0) {
+ et_number.setText(number + "");
+ }
+ }
+
+ /**
+ * 得到控件原来的值
+ */
+ public int getNumber() {
+ int number = 0;
+ try {
+ String numberStr = et_number.getText().toString().trim();
+ number = Integer.valueOf(numberStr);
+ } catch (Exception e) {
+ number = 0;
+ }
+ return number;
+ }
+
+ public void setOnAddDelClickListener(OnAddDelClickListener listener) {
+ if (listener != null) {
+ this.listener = listener;
+ }
+ }
+}
diff --git a/cm_utils/src/main/res/drawable-xhdpi/ic_add_circle_icon.png b/cm_utils/src/main/res/drawable-xhdpi/ic_add_circle_icon.png
new file mode 100644
index 0000000..cbd3aca
Binary files /dev/null and b/cm_utils/src/main/res/drawable-xhdpi/ic_add_circle_icon.png differ
diff --git a/cm_utils/src/main/res/drawable-xhdpi/ic_del_circle_icon.png b/cm_utils/src/main/res/drawable-xhdpi/ic_del_circle_icon.png
new file mode 100644
index 0000000..f179b46
Binary files /dev/null and b/cm_utils/src/main/res/drawable-xhdpi/ic_del_circle_icon.png differ
diff --git a/cm_utils/src/main/res/drawable-xhdpi/ic_goods_sort_default.png b/cm_utils/src/main/res/drawable-xhdpi/ic_goods_sort_default.png
new file mode 100644
index 0000000..c46912f
Binary files /dev/null and b/cm_utils/src/main/res/drawable-xhdpi/ic_goods_sort_default.png differ
diff --git a/cm_utils/src/main/res/layout/layout_add_delete.xml b/cm_utils/src/main/res/layout/layout_add_delete.xml
new file mode 100644
index 0000000..3e932af
--- /dev/null
+++ b/cm_utils/src/main/res/layout/layout_add_delete.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/moduleshop/src/main/AndroidManifest.xml b/moduleshop/src/main/AndroidManifest.xml
index 9eb6b15..a6d4484 100644
--- a/moduleshop/src/main/AndroidManifest.xml
+++ b/moduleshop/src/main/AndroidManifest.xml
@@ -4,21 +4,21 @@
{
setPrice(b.getGoodsItemUnitPrice());
+ mDetailBean.setGoodsPrice(b.getGoodsItemUnitPrice()+"");
mTvGoodsStock.setText("库存:" + b.getGoodsItemTotal());
mStandardAdapter.setSelPos(p);
});
mTvAddCar.setOnClickListener(v -> addToCar(mDetailBean));
-
+ mLlCar.setOnClickListener(v -> ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_SHOP_ACTIVITY_SHOP_CAR)
+ .navigation());
}
private void parserShopCar() {
@@ -185,6 +189,7 @@ public class GoodsDetailActivity extends BaseActivity {
mCarDatas.get(pos).setCarAmount(mCarDatas.get(pos).getCarAmount() + 1);
} else {
bean.setCarAmount(1);
+ bean.setGoodsPrice("");
mCarDatas.add(bean);
}
}
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/activitys/ShopCarActivity.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/activitys/ShopCarActivity.java
index 9f0907d..5c619f2 100644
--- a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/activitys/ShopCarActivity.java
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/activitys/ShopCarActivity.java
@@ -2,6 +2,9 @@ package com.tenlionsoft.moduleshop.activitys;
import android.text.TextUtils;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.alibaba.android.arouter.facade.annotation.Route;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -9,11 +12,16 @@ import com.sucstepsoft.cm_utils.constant.PathConfig;
import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity;
import com.sucstepsoft.cm_utils.utils.UserLgUtils;
import com.tengshisoft.moduleshop.R;
+import com.tengshisoft.moduleshop.R2;
+import com.tenlionsoft.moduleshop.adapter.GoodsCarAdapter;
+import com.tenlionsoft.moduleshop.beans.CustomCarBean;
import com.tenlionsoft.moduleshop.beans.ShopGoodsDetailBean;
import java.lang.reflect.Type;
+import java.util.ArrayList;
import java.util.List;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -21,9 +29,11 @@ import butterknife.ButterKnife;
*/
@Route(path = PathConfig.PATH_MODULE_SHOP_ACTIVITY_SHOP_CAR)
public class ShopCarActivity extends BaseActivity {
-
-
+ @BindView(R2.id.rlv_car)
+ RecyclerView mRlvCar;
private List mCarDatas;
+ private List mDatas;
+ private GoodsCarAdapter mAdapter;
@Override
protected int setLayoutId() {
@@ -34,6 +44,10 @@ public class ShopCarActivity extends BaseActivity {
public void initData() {
ButterKnife.bind(this);
mTvBaseTitle.setText("购物车");
+ mDatas = new ArrayList<>();
+ mAdapter = new GoodsCarAdapter(mActivity, mDatas);
+ mRlvCar.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvCar.setAdapter(mAdapter);
parserShopCar();
}
@@ -46,7 +60,7 @@ public class ShopCarActivity extends BaseActivity {
Type type = new TypeToken>() {
}.getType();
mCarDatas = gson.fromJson(shopCar, type);
- refreshView(STATE_LOAD_SUCCESS);
+ parserDatas();
} else {
refreshView(STATE_LOAD_EMPTY);
mTvErrorHint.setText("购物车暂无数据");
@@ -55,4 +69,26 @@ public class ShopCarActivity extends BaseActivity {
e.printStackTrace();
}
}
+
+ /**
+ * 构建数据
+ */
+ private void parserDatas() {
+ mDatas = new ArrayList<>();
+ for (int i = 0; i < mCarDatas.size(); i++) {
+ ShopGoodsDetailBean bean = mCarDatas.get(i);
+ CustomCarBean b = new CustomCarBean();
+ b.setShopId(bean.getShopId());
+ b.setShopName(bean.getShopName());
+ b.setGoods(new ArrayList<>());
+ for (int j = 0; j < mCarDatas.size(); j++) {
+ if (bean.getShopId().equals(mCarDatas.get(j).getShopId())) {
+ b.getGoods().add(mCarDatas.get(j));
+ }
+ }
+ mDatas.add(b);
+ }
+ mAdapter.setData(mDatas);
+ refreshView(STATE_LOAD_SUCCESS);
+ }
}
\ No newline at end of file
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/CarGoodsAdapter.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/CarGoodsAdapter.java
new file mode 100644
index 0000000..d0b0758
--- /dev/null
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/CarGoodsAdapter.java
@@ -0,0 +1,64 @@
+package com.tenlionsoft.moduleshop.adapter;
+
+import android.content.Context;
+import android.text.Html;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi;
+import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter;
+import com.sucstepsoft.cm_utils.core.widget.views.AddOrDelView;
+import com.tengshisoft.moduleshop.R;
+import com.tenlionsoft.moduleshop.beans.ShopGoodsDetailBean;
+import com.tenlionsoft.moduleshop.holder.CarGoodsHolder;
+
+import java.util.List;
+
+/**
+ * 购物车中商品适配器
+ */
+public class CarGoodsAdapter extends BaseRecyclerAdapter {
+
+ public CarGoodsAdapter(Context ctx, List list) {
+ super(ctx, list);
+ }
+
+ @Override
+ public CarGoodsHolder createHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_car_goods, parent, false);
+ return new CarGoodsHolder(view);
+ }
+
+ @Override
+ public void bindHolder(CarGoodsHolder h, int i) {
+ ShopGoodsDetailBean bean = mData.get(i);
+ h.mTvName.setText(Html.fromHtml(bean.getGoodsName()));
+ Glide.with(mContext)
+ .load(BaseUrlApi.BASE_SHOP_IMG_URL + bean.getGoodsIcon())
+ .apply(new RequestOptions()
+ .placeholder(R.drawable.ic_img_default)
+ .error(R.drawable.ic_img_default))
+ .into(h.mIvIcon);
+ h.mTvPrice.setText("¥ " + bean.getGoodsPrice());
+ h.mTvSales.setText("销量:" + bean.getGoodsSalesVolume() + "");
+ h.mTvFreight.setText("1".equals(bean.getGoodsNotFreight()) ? "不包邮" : "包邮");
+ h.mTvEvaluate.setText("评分:" + bean.getGoodStar() + "");
+ h.mAodView.setNumber(bean.getCarAmount());
+ h.mAodView.setOnAddDelClickListener(new AddOrDelView.OnAddDelClickListener() {
+ @Override
+ public void onAddClick(View v) {
+ bean.setCarAmount(bean.getCarAmount() + 1);
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public void onDelClick(View v) {
+ bean.setCarAmount(bean.getCarAmount() - 1);
+ notifyDataSetChanged();
+ }
+ });
+ }
+}
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/GoodsCarAdapter.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/GoodsCarAdapter.java
new file mode 100644
index 0000000..c0fae06
--- /dev/null
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/GoodsCarAdapter.java
@@ -0,0 +1,40 @@
+package com.tenlionsoft.moduleshop.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter;
+import com.tengshisoft.moduleshop.R;
+import com.tenlionsoft.moduleshop.beans.CustomCarBean;
+import com.tenlionsoft.moduleshop.holder.GoodsCarHolder;
+
+import java.util.List;
+
+/**
+ * 购物车适配器
+ */
+public class GoodsCarAdapter extends BaseRecyclerAdapter {
+
+ public GoodsCarAdapter(Context ctx, List list) {
+ super(ctx, list);
+ }
+
+ @Override
+ public GoodsCarHolder createHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_goods_car, parent, false);
+ return new GoodsCarHolder(view);
+ }
+
+ @Override
+ public void bindHolder(GoodsCarHolder h, int i) {
+ CustomCarBean bean = mData.get(i);
+ h.mTvShopName.setText(bean.getShopName());
+ CarGoodsAdapter adapter = new CarGoodsAdapter(mContext, bean.getGoods());
+ h.mRlvGoods.setLayoutManager(new LinearLayoutManager(mContext));
+ h.mRlvGoods.setAdapter(adapter);
+ }
+}
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/ShopSortAdapter.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/ShopSortAdapter.java
index 9f3e451..3ff2ca6 100644
--- a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/ShopSortAdapter.java
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/adapter/ShopSortAdapter.java
@@ -5,6 +5,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi;
import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter;
import com.tengshisoft.moduleshop.R;
import com.tenlionsoft.moduleshop.beans.ShopSortListBean;
@@ -28,5 +31,11 @@ public class ShopSortAdapter extends BaseRecyclerAdapter goods;
+
+ public String getShopName() {
+ return shopName;
+ }
+
+ public void setShopName(String shopName) {
+ this.shopName = shopName;
+ }
+
+ public String getShopId() {
+ return shopId;
+ }
+
+ public void setShopId(String shopId) {
+ this.shopId = shopId;
+ }
+
+ public List getGoods() {
+ return goods;
+ }
+
+ public void setGoods(List goods) {
+ this.goods = goods;
+ }
+}
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/beans/ShopGoodsDetailBean.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/beans/ShopGoodsDetailBean.java
index 2cf2b54..137dbc0 100644
--- a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/beans/ShopGoodsDetailBean.java
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/beans/ShopGoodsDetailBean.java
@@ -33,8 +33,18 @@ public class ShopGoodsDetailBean {
private String shopId;
private String shopName;
private int userEvaluate;
- private int carAmount;
+ //自定义 购物车中数量与商品单价
+ private int carAmount;
+ private String goodsPrice;
+
+ public String getGoodsPrice() {
+ return goodsPrice;
+ }
+
+ public void setGoodsPrice(String goodsPrice) {
+ this.goodsPrice = goodsPrice;
+ }
public int getCarAmount() {
return carAmount;
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/CarGoodsHolder.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/CarGoodsHolder.java
new file mode 100644
index 0000000..db36c00
--- /dev/null
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/CarGoodsHolder.java
@@ -0,0 +1,35 @@
+package com.tenlionsoft.moduleshop.holder;
+
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sucstepsoft.cm_utils.core.widget.views.AddOrDelView;
+import com.sucstepsoft.cm_utils.core.widget.views.TypeFaceTextView;
+import com.tengshisoft.moduleshop.R;
+
+/**
+ * 购物车中商品
+ */
+public class CarGoodsHolder extends RecyclerView.ViewHolder {
+ public ImageView mIvIcon;
+ public TypeFaceTextView mTvName;
+ public TypeFaceTextView mTvPrice;
+ public TypeFaceTextView mTvSales;
+ public TypeFaceTextView mTvEvaluate;
+ public TypeFaceTextView mTvFreight;
+ public AddOrDelView mAodView;
+
+ public CarGoodsHolder(@NonNull View itemView) {
+ super(itemView);
+ mIvIcon = itemView.findViewById(R.id.iv_goods_icon);
+ mTvName = itemView.findViewById(R.id.tv_goods_name);
+ mTvPrice = itemView.findViewById(R.id.tv_goods_price);
+ mTvSales = itemView.findViewById(R.id.tv_goods_sales);
+ mTvEvaluate = itemView.findViewById(R.id.tv_goods_evaluate);
+ mTvFreight = itemView.findViewById(R.id.tv_goods_freight);
+ mAodView = itemView.findViewById(R.id.aod_control);
+ }
+}
diff --git a/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/GoodsCarHolder.java b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/GoodsCarHolder.java
new file mode 100644
index 0000000..ad8724d
--- /dev/null
+++ b/moduleshop/src/main/java/com/tenlionsoft/moduleshop/holder/GoodsCarHolder.java
@@ -0,0 +1,24 @@
+package com.tenlionsoft.moduleshop.holder;
+
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sucstepsoft.cm_utils.core.widget.views.TypeFaceTextView;
+import com.tengshisoft.moduleshop.R;
+
+/**
+ * 购物车列表
+ */
+public class GoodsCarHolder extends RecyclerView.ViewHolder {
+
+ public TypeFaceTextView mTvShopName;
+ public RecyclerView mRlvGoods;
+
+ public GoodsCarHolder(@NonNull View itemView) {
+ super(itemView);
+ mTvShopName = itemView.findViewById(R.id.tv_shop_name);
+ mRlvGoods = itemView.findViewById(R.id.rlv_goods);
+ }
+}
diff --git a/moduleshop/src/main/res/layout/item_car_goods.xml b/moduleshop/src/main/res/layout/item_car_goods.xml
new file mode 100644
index 0000000..0992fd7
--- /dev/null
+++ b/moduleshop/src/main/res/layout/item_car_goods.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/moduleshop/src/main/res/layout/item_goods_car.xml b/moduleshop/src/main/res/layout/item_goods_car.xml
new file mode 100644
index 0000000..8465bc4
--- /dev/null
+++ b/moduleshop/src/main/res/layout/item_goods_car.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/moduleshop/src/main/res/layout/item_second_shop_sort.xml b/moduleshop/src/main/res/layout/item_second_shop_sort.xml
index c16107d..9bbc4c6 100644
--- a/moduleshop/src/main/res/layout/item_second_shop_sort.xml
+++ b/moduleshop/src/main/res/layout/item_second_shop_sort.xml
@@ -40,6 +40,8 @@
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
+ android:layout_marginBottom="10dp"
+ app:cardCornerRadius="5dp"
app:cardElevation="1dp">