M层:
public interface IModel {
void getGoodsDetail(String url, GetGoodsDetailListener getGoodsDetailListener);
//添加到购物车
void addToCart(String url, Map<String, String> parms, AddListener addListener);
//购物车展示的方法发
void showGoods(String url, Map<String, String> parms, GetCarListener carListener);
//计算的功能
double jisuan(List<CartListBean.DataBean> list);
//获取订单页
void showDingDan(String url,Map<String, String> parms,GetDingDanListener getDingDanListener);
}
public class ModelImpl implements IModel {
@Override
public void getGoodsDetail(String url, final GetGoodsDetailListener getGoodsDetailListener) {
//写具体的代码
OkHttpUtils instance = OkHttpUtils.getInstance();
instance.okGet(url, "android", "12");
instance.setOnOkLoadListener(new OKLoadListener() {
@Override
public void okLoadSuccess(String json) {
//判断code,如果code是0,说明网络请求成功,就将数据传出去。否则就是失败
try {
JSONObject object = new JSONObject(json);
String code = object.getString("code");
if (code.equals("0")) {
getGoodsDetailListener.getDetailSuccess(json);
} else {
getGoodsDetailListener.getDetailError("数据不正确");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void okLoadError(String error) {
getGoodsDetailListener.getDetailError(error);
}
});
}
@Override
public void addToCart(String url, Map<String, String> parms, final AddListener addListener) {
OkHttpUtils httpUtils = OkHttpUtils.getInstance();
httpUtils.okPost(url, parms);
httpUtils.setOnOkLoadListener(new OKLoadListener() {
@Override
public void okLoadSuccess(String json) {
try {
JSONObject object = new JSONObject(json);
String code = object.getString("code");
if (code.equals("0")) {
addListener.addSuccess();
} else {
addListener.addError();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void okLoadError(String error) {
addListener.addError();
}
});
}
//获取购物车列表具体实现
@Override
public void showGoods(String url, Map<String, String> parms, final GetCarListener carListener) {
OkHttpUtils httpUtils = OkHttpUtils.getInstance();
httpUtils.okPost(url, parms);
httpUtils.setOnOkLoadListener(new OKLoadListener() {
@Override
public void okLoadSuccess(String json) {
//可以做一个判断
try {
JSONObject object = new JSONObject(json);
String code = object.getString("code");
if (code.equals("0")) {
carListener.getSuccess(json);
} else {
carListener.getError(json);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void okLoadError(String error) {
carListener.getError(error);
}
});
}
//计算的具体实现
@Override
public double jisuan(List<CartListBean.DataBean> list) {
//遍历集合,如果商品被选中,就加上去
double sum_temp = 0;
for (int i = 0; i < list.size(); i++) {
List<CartListBean.ChildBean> list1 = list.get(i).getList();
for (int j = 0; j < list1.size(); j++) {
CartListBean.ChildBean childBean = list1.get(j);
if (childBean.isChild_flag()) {
sum_temp += childBean.getBargainPrice();
}
}
}
return sum_temp;
}
//显示订单
@Override
public void showDingDan(String url, Map<String, String> parms, final GetDingDanListener getDingDanListener) {
OkHttpUtils httpUtils = OkHttpUtils.getInstance();
httpUtils.okPost(url, parms);
httpUtils.setOnOkLoadListener(new OKLoadListener() {
@Override
public void okLoadSuccess(String json) {
getDingDanListener.getDingDanSuccess(json);
}
@Override
public void okLoadError(String error) {
getDingDanListener.getDingDanError(error);
}
});
}
}
适配器:
public class MyAdapter extends BaseExpandableListAdapter {
private static final String TAG = "MyAdapter";
private final Context context;
private final List<CartListBean.DataBean> list;
private final ICartView iCartView;
public MyAdapter(Context context, List<CartListBean.DataBean> list, ICartView iCartView) {
this.context = context;
this.list = list;
this.iCartView = iCartView;
}
@Override
public int getGroupCount() {
return list.size();
}
@Override
public int getChildrenCount(int groupPosition) {
Log.d(TAG, "getChildrenCount: " + list.get(groupPosition).getList().size());
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 true;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ParentViewHolder parentViewHolder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_parent, null);
CheckBox parent_cb = convertView.findViewById(R.id.parent_cb);
TextView parent_tv = convertView.findViewById(R.id.parent_title);
parentViewHolder = new ParentViewHolder(parent_cb, parent_tv);
convertView.setTag(parentViewHolder);
} else {
parentViewHolder = (ParentViewHolder) convertView.getTag();
}
//赋值
boolean parent_flag = list.get(groupPosition).isParent_flag();
String sellerName = list.get(groupPosition).getSellerName();
parentViewHolder.parent_cb.setChecked(parent_flag);
//给复选框设置点击事件,当点击的时候,Bean里的数据会相应的改变
parentViewHolder.parent_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//取得现在复习框的状态,然后置反
boolean parent_flag1 = list.get(groupPosition).isParent_flag();
parent_flag1 = !parent_flag1;
list.get(groupPosition).setParent_flag(parent_flag1);
//当选择商家的时候,子条目的状态全部变成选择/未选中
List<CartListBean.ChildBean> childList = MyAdapter.this.list.get(groupPosition).getList();
for (int i = 0; i < childList.size(); i++) {
CartListBean.ChildBean childBean = childList.get(i);
childBean.setChild_flag(parent_flag1);
}
//记得刷新
notifyDataSetChanged();
//计算
new PresenterImpl().showSumToView(new ModelImpl(), iCartView);
}
});
parentViewHolder.parent_title.setText(sellerName);
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_child, null);
CheckBox child_cb = convertView.findViewById(R.id.child_cb);
ImageView child_image = convertView.findViewById(R.id.child_image);
TextView child_title = convertView.findViewById(R.id.child_title);
TextView child_price = convertView.findViewById(R.id.child_price);
childViewHolder = new ChildViewHolder(child_cb, child_image, child_title, child_price);
convertView.setTag(childViewHolder);
} else {
childViewHolder = (ChildViewHolder) convertView.getTag();
}
//赋值
final List<CartListBean.ChildBean> childBeanList = list.get(groupPosition).getList();
CartListBean.ChildBean childBean = childBeanList.get(childPosition);
boolean child_flag = childBean.isChild_flag();
String image_url = childBean.getImages().split("\\|")[0];
String title = childBean.getTitle();
double bargainPrice = childBean.getBargainPrice();
childViewHolder.child_cb.setChecked(child_flag);
childViewHolder.child_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CartListBean.ChildBean childBean1 = childBeanList.get(childPosition);
boolean child_flag1 = childBean1.isChild_flag();
child_flag1 = !child_flag1;
childBean1.setChild_flag(child_flag1);
//当字条目有一个未选中,父条目就不能被选中
boolean flag_temp = true;
for (int j = 0; j < childBeanList.size(); j++) {
CartListBean.ChildBean childBean2 = childBeanList.get(j);
if (!childBean2.isChild_flag()) {
flag_temp = false;
}
}
//将最终的flag_temp结果给父条目
list.get(groupPosition).setParent_flag(flag_temp);
//记得刷新
notifyDataSetChanged();
//计算
new PresenterImpl().showSumToView(new ModelImpl(), iCartView);
}
});
Glide.with(context).load(image_url).into(childViewHolder.child_image);
childViewHolder.child_title.setText(title);
childViewHolder.child_price.setText(bargainPrice + "");
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
//父布局的ViewHolder
class ParentViewHolder {
public CheckBox parent_cb;
public TextView parent_title;
public ParentViewHolder(CheckBox parent_cb, TextView parent_title) {
this.parent_cb = parent_cb;
this.parent_title = parent_title;
}
}
//子布局的ViewHoder
class ChildViewHolder {
public CheckBox child_cb;
public ImageView child_image;
public TextView child_title;
public TextView child_price;
public ChildViewHolder(CheckBox child_cb, ImageView child_image, TextView child_title, TextView child_price) {
this.child_cb = child_cb;
this.child_image = child_image;
this.child_title = child_title;
this.child_price = child_price;
}
}
}
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
private static final String TAG = "MyRecyclerAdapter&&&&&&";
private final Context context;
private final List<DingDanBean.DataBean> list;
public MyRecyclerAdapter(Context context, List<DingDanBean.DataBean> data) {
this.context = context;
this.list = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item_dingdan, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.getDingdan_title().setText(list.get(position).getTitle());
holder.getDingdan_price().setText(list.get(position).getPrice() + "");
holder.getDingdan_time().setText(list.get(position).getCreatetime());
//状态0 待支付
// 1 已支付
// 2 已取消
int status = (int) list.get(position).getStatus();
switch (status) {
case 0:
holder.getDingdan_state().setText("待支付");
Log.d(TAG, "onBindViewHolder: " + holder + "--" + holder.getDingdan_cancel());
holder.getDingdan_cancel().setText("取消订单");
break;
case 1:
holder.getDingdan_state().setText("已支付");
holder.getDingdan_cancel().setText("查看订单");
break;
case 2:
holder.getDingdan_state().setText("已取消");
holder.getDingdan_cancel().setText("查看订单");
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private TextView dingdan_title;
private TextView dingdan_price;
private TextView dingdan_time;
private TextView dingdan_state;
private Button dingdan_cancel;
public MyViewHolder(View itemView) {
super(itemView);
dingdan_title = itemView.findViewById(R.id.dingdan_title);
dingdan_price = itemView.findViewById(R.id.dingdan_price);
dingdan_time = itemView.findViewById(R.id.dingdan_time);
dingdan_state = itemView.findViewById(R.id.dingdan_state);
dingdan_cancel = itemView.findViewById(R.id.bt);
}
public TextView getDingdan_title() {
return dingdan_title;
}
public void setDingdan_title(TextView dingdan_title) {
this.dingdan_title = dingdan_title;
}
public TextView getDingdan_price() {
return dingdan_price;
}
public void setDingdan_price(TextView dingdan_price) {
this.dingdan_price = dingdan_price;
}
public TextView getDingdan_time() {
return dingdan_time;
}
public void setDingdan_time(TextView dingdan_time) {
this.dingdan_time = dingdan_time;
}
public TextView getDingdan_state() {
return dingdan_state;
}
public void setDingdan_state(TextView dingdan_state) {
this.dingdan_state = dingdan_state;
}
public Button getDingdan_cancel() {
return dingdan_cancel;
}
public void setDingdan_cancel(Button dingdan_cancel) {
this.dingdan_cancel = dingdan_cancel;
}
}
}
P层:
public interface IPresenter {
//从model里面获取商品详情,然后展示在view里面
void showDetailToView(IModel iModel, IMainView iMainView);
//添加到购物车
void addCartList(IModel iModel, IMainView iMainView);
//展示购物车
void showCarListToView(IModel iModel, ICartView iCartView);
//将价格显示到View
void showSumToView(IModel iModel, ICartView iCartView);
//将订单显示出来
void showDingDanToView(IModel iModel, IDingDanView iDingDanView);
void shuaXin(IModel iModel, IDingDanView iDingDanView);
void jiaZaiGengDuo(IModel iModel, IDingDanView iDingDanView);
}
public class PresenterImpl implements IPresenter {
//具体的方法
@Override
public void showDetailToView(IModel iModel, final IMainView iMainView) {
iModel.getGoodsDetail(HttpConfig.detail_url, new GetGoodsDetailListener() {
@Override
public void getDetailSuccess(String json) {
Gson gson = new Gson();
GoodsDetailBean goodsDetailBean = gson.fromJson(json, GoodsDetailBean.class);
iMainView.showGoods(goodsDetailBean.getData());
}
@Override
public void getDetailError(String error) {
iMainView.showError(error);
}
});
}
//将商品添加到购物车页面
@Override
public void addCartList(IModel iModel, final IMainView iMainView) {
Map<String, String> parms = new HashMap<>();
parms.put("uid", "71");
parms.put("pid", iMainView.getPid());
iModel.addToCart(HttpConfig.add_url, parms, new AddListener() {
@Override
public void addSuccess() {
iMainView.addSuccess();
}
@Override
public void addError() {
iMainView.addError();
}
});
}
//展示购物车的具体实现
@Override
public void showCarListToView(IModel iModel, final ICartView iCartView) {
Map<String, String> parms = new HashMap<>();
parms.put("uid", "71");
iModel.showGoods(HttpConfig.get_cart_list, parms, new GetCarListener() {
@Override
public void getSuccess(String json) {
Gson gson = new Gson();
CartListBean cartListBean = gson.fromJson(json, CartListBean.class);
List<CartListBean.DataBean> data = cartListBean.getData();
iCartView.showGoodsToCartList(data);
}
@Override
public void getError(String error) {
iCartView.showError(error);
}
});
}
//计算的具体实现
@Override
public void showSumToView(IModel iModel, ICartView iCartView) {
double sum = iModel.jisuan(iCartView.getList());
iCartView.showSum(sum);
}
//显示订单
@Override
public void showDingDanToView(IModel iModel, final IDingDanView iDingDanView) {
Map<String, String> parms = new HashMap<>();
parms.put("uid", "71");
parms.put("page", "1");
iModel.showDingDan(HttpConfig.dingdan_list, parms, new GetDingDanListener() {
@Override
public void getDingDanSuccess(String json) {
Gson gson = new Gson();
DingDanBean dingDanBean = gson.fromJson(json, DingDanBean.class);
List<DingDanBean.DataBean> list = dingDanBean.getData();
iDingDanView.showDingDan(list);
}
@Override
public void getDingDanError(String erro) {
}
});
}
@Override
public void shuaXin(IModel iModel, final IDingDanView iDingDanView) {
Map<String, String> parms = new HashMap<>();
parms.put("uid", "71");
parms.put("page", "1");
iModel.showDingDan(HttpConfig.dingdan_list, parms, new GetDingDanListener() {
@Override
public void getDingDanSuccess(String json) {
Gson gson = new Gson();
DingDanBean dingDanBean = gson.fromJson(json, DingDanBean.class);
List<DingDanBean.DataBean> list = dingDanBean.getData();
iDingDanView.showDingDan(list);
}
@Override
public void getDingDanError(String erro) {
}
});
}
int page = 1;
@Override
public void jiaZaiGengDuo(IModel iModel, final IDingDanView iDingDanView) {
Map<String, String> parms = new HashMap<>();
parms.put("uid", "71");
parms.put("page", ++page + "");
iModel.showDingDan(HttpConfig.dingdan_list, parms, new GetDingDanListener() {
@Override
public void getDingDanSuccess(String json) {
Gson gson = new Gson();
DingDanBean dingDanBean = gson.fromJson(json, DingDanBean.class);
List<DingDanBean.DataBean> list = dingDanBean.getData();
iDingDanView.showDingDan(list);
}
@Override
public void getDingDanError(String erro) {
}
});
}
}
详情页:
public interface IMainView {
//展示的方法
void showGoods(GoodsDetailBean.DataBean data);
//获取数据失败
void showError(String error);
//添加购物车成功
void addSuccess();
//添加失败
void addError();
//获取pid的方法
String getPid();
}
购物车:
public interface ICartView {
//展示购物车列表
void showGoodsToCartList(List<CartListBean.DataBean> list);
//展示错误
void showError(String error);
//显示总价
void showSum(double sum);
//获取集合数据
List<CartListBean.DataBean> getList();
}
主方法:
public class MainActivity extends AppCompatActivity implements IMainView, View.OnClickListener {
private ImageView main_big_pic;
private TextView main_title;
private TextView main_jump;
private TextView main_add;
private TextView main_add1;
private String pid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化界面
initViews();
//调用presenter
PresenterImpl presenter = new PresenterImpl();
presenter.showDetailToView(new ModelImpl(), this);
}
private void initViews() {
main_big_pic = findViewById(R.id.main_big_pic);
main_title = findViewById(R.id.main_title);
main_jump = findViewById(R.id.main_jump);
main_add1 = findViewById(R.id.main_add);
//给控件注册点击事件
main_jump.setOnClickListener(this);
main_add1.setOnClickListener(this);
}
//展示商品
@Override
public void showGoods(GoodsDetailBean.DataBean data) {
this.pid=data.getPid()+"";
String images = data.getImages();
String icon_url = images.split("\\|")[0];
//放入控件
Glide.with(this).load(icon_url).into(main_big_pic);
main_title.setText(data.getTitle());
}
//吐司,提示获取数据失败
@Override
public void showError(String error) {
Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
}
//添加成功
@Override
public void addSuccess() {
Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
}
//添加失败
@Override
public void addError() {
Toast.makeText(MainActivity.this, "添加失败", Toast.LENGTH_SHORT).show();
}
@Override
public String getPid() {
return pid;
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_jump:
//跳转到购物车列表页面
startActivity(new Intent(MainActivity.this, CartListActivity.class));
break;
case R.id.main_add:
//将商品添加到购物车
new PresenterImpl().addCartList(new ModelImpl(),this);
break;
}
}
}
public class CartListActivity extends AppCompatActivity implements ICartView, View.OnClickListener {
private ExpandableListView cartlist_expandable;
private static final String TAG = "CartListActivity=====";
private TextView sum_tv;
private List<CartListBean.DataBean> list;
private CheckBox cartlist_cb;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_cart_list);
//初始化视图
initViews();
//调用presenter开始逻辑
new PresenterImpl().showCarListToView(new ModelImpl(), this);
}
private void initViews() {
cartlist_expandable = findViewById(R.id.cartlist_expandable);
cartlist_cb = findViewById(R.id.cartlist_cb);
//注册点击事件
cartlist_cb.setOnClickListener(this);
//结算按钮
Button cartlist_caculate = findViewById(R.id.cartlist_caculate);
cartlist_caculate.setOnClickListener(this);
sum_tv = findViewById(R.id.cartlist_sum);
}
//获取购物车列表,并展示
@Override
public void showGoodsToCartList(List<CartListBean.DataBean> list) {
this.list = list;
//展示
Log.d(TAG, "showGoodsToCartList: " + list.toString());
//复习ExpableListView
myAdapter = new MyAdapter(CartListActivity.this, list, this);
cartlist_expandable.setAdapter(myAdapter);
//展开ExpanableListView
int childCount = cartlist_expandable.getCount();
for (int i = 0; i < childCount; i++) {
cartlist_expandable.expandGroup(i);
}
}
@Override
public void showError(String error) {
Toast.makeText(CartListActivity.this, "--" + error, Toast.LENGTH_SHORT).show();
}
//显示总价
@Override
public void showSum(double sum) {
sum_tv.setText("合计:" + sum);
}
//返回数据
@Override
public List<CartListBean.DataBean> getList() {
return list;
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.cartlist_cb:
//全选/全不选
boolean checked = cartlist_cb.isChecked();
for (int i = 0; i < list.size(); i++) {
list.get(i).setParent_flag(checked);
List<CartListBean.ChildBean> list1 = this.list.get(i).getList();
for (int j = 0; j < list1.size(); j++) {
list1.get(j).setChild_flag(checked);
}
}
myAdapter.notifyDataSetChanged();
//计算
new PresenterImpl().showSumToView(new ModelImpl(), this);
break;
case R.id.cartlist_caculate:
//跳转
startActivity(new Intent(CartListActivity.this, DingDanActivity.class));
break;
}
}
}
public class DingDanActivity extends Activity implements IDingDanView {
private XRecyclerView xRecyclerView;
private static final String TAG = "DingDanActivity******";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dingdan);
//初始化界面
initViews();
//记得调用
new PresenterImpl().showDingDanToView(new ModelImpl(), this);
}
private void initViews() {
xRecyclerView = findViewById(R.id.dingdan_xrecycler_view);
//设置布局样式
xRecyclerView.setLayoutManager(new LinearLayoutManager(this));
xRecyclerView.addItemDecoration(new MyItemDecoration(this, MyItemDecoration.VERTICAL_LIST));
//设置上啦加载跟多,下拉刷新
xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
Log.d(TAG, "onRefresh: ------");
}
@Override
public void onLoadMore() {
Log.d(TAG, "onLoadMore: &&&&&&&&&&&&");
}
});
}
//显示订单
@Override
public void showDingDan(List<DingDanBean.DataBean> data) {
//设置适配器
Log.d(TAG, "showDingDan: " + data.toString());
MyRecyclerAdapter myRecyclerAdapter = new MyRecyclerAdapter(DingDanActivity.this, data);
xRecyclerView.setAdapter(myRecyclerAdapter);
}
}
public interface IDingDanView {
//显示订单
void showDingDan(List<DingDanBean.DataBean> data);
}