这是购物车的Adapter
package com.example.mychewugou.adapter;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.mychewugou.R;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.bean.CountPriceBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.util.OkHttp3Util;
import com.example.mychewugou.view.MainActivity;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by hasee on 2018/1/15.
*/
public class MyAdapter extends BaseExpandableListAdapter{
private Context context;
private CartBean cartBean;
private Handler handler;
private CartPresenter cartPresenter;
private RelativeLayout relative_progress;
private int size;
private int childI;
private int allSize;
private int index;
public MyAdapter(Context context, CartBean cartBean, Handler handler, CartPresenter cartPresenter, RelativeLayout relative_progress) {
this.context = context;
this.cartBean = cartBean;
this.handler = handler;
this.cartPresenter = cartPresenter;
this.relative_progress = relative_progress;
}
@Override
public int getGroupCount() {
return cartBean.getData().size();
}
@Override
public int getChildrenCount(int groupPosition) {
return cartBean.getData().get(groupPosition).getList().size();
}
@Override
public Object getGroup(int groupPosition) {
return cartBean.getData().get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return cartBean.getData().get(groupPosition).getList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean b, View view, ViewGroup viewGroup) {
final GroupHolder holder;
if (view==null){
view = View.inflate(context, R.layout.group_item_layout,null);
holder = new GroupHolder();
holder.check_group = view.findViewById(R.id.check_group);
holder.text_group = view.findViewById(R.id.text_group);
view.setTag(holder);
}else {
holder = (GroupHolder) view.getTag();
}
final CartBean.DataBean dataBean = cartBean.getData().get(groupPosition);
holder.check_group.setChecked(dataBean.isGroupChecked());
holder.text_group.setText(dataBean.getSellerName());
holder.check_group.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
relative_progress.setVisibility(View.VISIBLE);//显示
size = dataBean.getList().size();
childI = 0;
updateAllInGroup(holder.check_group.isChecked(),dataBean);
}
});
return view;
}
private void updateAllInGroup(final boolean checked, final CartBean.DataBean dataBean) {
CartBean.DataBean.ListBean listBean = dataBean.getList().get(childI);
Map<String, String> params = new HashMap<>();
params.put("uid","2809");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(checked ? 1:0));
params.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
if (childI<size){
updateAllInGroup(checked,dataBean);
}
//所有的条目已经更新完成....再次请求查询购物车的数据
cartPresenter.getData(ApiUtil.cartUrl);
}
}
});
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
ChildHolder holder;
if (view ==null){
view = View.inflate(context,R.layout.child_item_layout,null);
holder = new ChildHolder();
holder.text_add = view.findViewById(R.id.text_add);
holder.text_num = view.findViewById(R.id.text_num);
holder.text_jian = view.findViewById(R.id.text_jian);
holder.text_title = view.findViewById(R.id.text_title);
holder.text_price = view.findViewById(R.id.text_price);
holder.image_good = view.findViewById(R.id.image_good);
holder.check_child = view.findViewById(R.id.check_child);
holder.text_delete = view.findViewById(R.id.text_delete);
view.setTag(holder);
}else {
holder = (ChildHolder) view.getTag();
}
final CartBean.DataBean.ListBean listBean = cartBean.getData().get(groupPosition).getList().get(childPosition);
holder.text_num.setText(listBean.getNum()+"");
holder.text_price.setText("¥"+listBean.getBargainPrice()+"");
holder.text_title.setText(listBean.getTitle());
holder.check_child.setChecked(listBean.getSelected()==0? false:true);
String[] split = listBean.getImages().split("\\|");
Glide.with(context).load(split[0]).into(holder.image_good);
holder.check_child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateChildChecked(listBean);
}
});
//加号
holder.text_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//请求更新的接口
updateChildNum(listBean,true);
}
});
//减号
holder.text_jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listBean.getNum() == 1){
return;
}
//更新数量,,,减
updateChildNum(listBean,false);
}
});
//删除
holder.text_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//显示progress
relative_progress.setVisibility(View.VISIBLE);
//uid=72&pid=1&source=android
Map<String, String> params = new HashMap<>();
params.put("uid","2809");
params.put("pid", String.valueOf(listBean.getPid()));
params.put("source","android");
OkHttp3Util.doPost(ApiUtil.deleteCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
//删除成功之后.....再次查询购物车
cartPresenter.getData(ApiUtil.cartUrl);
}
}
});
}
});
return view;
}
private void updateChildNum(CartBean.DataBean.ListBean listBean, boolean isAdded) {
//一旦执行更新的操作,,,progressBar显示
relative_progress.setVisibility(View.VISIBLE);
//?uid=71&sellerid=1&pid=1&selected=0&num=10
Map<String, String> params = new HashMap<>();
params.put("uid","2809");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(listBean.getSelected()));
if (isAdded){
params.put("num", String.valueOf(listBean.getNum() + 1));
}else {
params.put("num", String.valueOf(listBean.getNum() - 1));
}
OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//更新成功之后...网络上的数据发生了改变...再次请求购物车的接口进行数据的展示
if (response.isSuccessful()){
cartPresenter.getData(ApiUtil.cartUrl);
}
}
});
}
private void updateChildChecked(CartBean.DataBean.ListBean listBean) {
//一旦执行更新的操作,,,progressBar显示
relative_progress.setVisibility(View.VISIBLE);
//?uid=71&sellerid=1&pid=1&selected=0&num=10
Map<String, String> params = new HashMap<>();
params.put("uid","2809");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(listBean.getSelected() == 0? 1:0));
params.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//更新成功之后...网络上的数据发生了改变...再次请求购物车的接口进行数据的展示
if (response.isSuccessful()){
cartPresenter.getData(ApiUtil.cartUrl);
}
}
});
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void sendPriceAndCount() {
double price = 0;
int count = 0;
//通过判断二级列表是否勾选,,,,计算价格数量
for (int i=0;i<cartBean.getData().size();i++){
for (int j = 0;j<cartBean.getData().get(i).getList().size();j++){
if (cartBean.getData().get(i).getList().get(j).getSelected() == 1){
//价格是打折的价格...........
price += cartBean.getData().get(i).getList().get(j).getNum() * cartBean.getData().get(i).getList().get(j).getBargainPrice();
count += cartBean.getData().get(i).getList().get(j).getNum();
}
}
}
//精准的保留double的两位小数
DecimalFormat decimalFormat = new DecimalFormat("#.00");
String priceString = decimalFormat.format(price);
CountPriceBean countPriceBean = new CountPriceBean(priceString, count);
//发送...显示
Message msg = Message.obtain();
msg.what = 0;
msg.obj = countPriceBean;
handler.sendMessage(msg);
}
public void setAllChildState(boolean checked) {
//创建一个集合 装所有的子条目
List<CartBean.DataBean.ListBean> allList = new ArrayList<>();
for (int i=0;i<cartBean.getData().size();i++){
for (int j=0;j<cartBean.getData().get(i).getList().size();j++){
allList.add(cartBean.getData().get(i).getList().get(j));
}
}
relative_progress.setVisibility(View.VISIBLE);
allSize = allList.size();
index = 0;
//通过 递归 更新所有子条目的选中
updateAllChild(allList,checked);
}
private void updateAllChild(final List<CartBean.DataBean.ListBean> allList, final boolean checked) {
CartBean.DataBean.ListBean listBean = allList.get(index);//0
Map<String, String> params = new HashMap<>();
params.put("uid","2809");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(checked ? 1:0));
params.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
index = index +1;//0,1,2......3
if (index < allSize){
updateAllChild(allList,checked);
}else {
//查询购物车
cartPresenter.getData(ApiUtil.cartUrl);
}
}
}
});
}
private class GroupHolder{
CheckBox check_group;
TextView text_group;
}
private class ChildHolder{
CheckBox check_child;
ImageView image_good;
TextView text_title;
TextView text_price;
TextView text_jian;
TextView text_num;
TextView text_add;
TextView text_delete;
}
}
订单的Adapter
package com.example.mychewugou.adapter;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.mychewugou.R;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.holder.MyDingDanHolder;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.util.OkHttp3Util;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class MyDingDanAdapter extends RecyclerView.Adapter<MyDingDanHolder> {
private final Context context;
private final List<MyDataDingDanBean.DataBean> list;
private Presenterdingdanq presenter;
private int page;
public MyDingDanAdapter(Context context, List<MyDataDingDanBean.DataBean> list, Presenterdingdanq presenter, int page) {
this.context = context;
this.list = list;
this.presenter = presenter;
this.page = page;
}
@Override
public MyDingDanHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_dingdan,parent, false);
MyDingDanHolder holder = new MyDingDanHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyDingDanHolder holder, final int position) {
holder.text_title.setText(list.get(position).getTitle());
holder.text_price.setText("价格: "+list.get(position).getPrice());
holder.text_tame.setText(list.get(position).getCreatetime());
if (list.get(position).getStatus()==0){
holder.text_daizhifu.setText("待支付");
holder.text_daizhifu.setTextColor(Color.RED);
holder.text_btn.setText("取消订单");
holder.text_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage("确定要取消订单吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Map<String, String> params=new HashMap<>();
params.put("uid","3690");
params.put("orderId", String.valueOf(list.get(position).getOrderid()));
params.put("status", String.valueOf(2));
OkHttp3Util.doPost(ApiUtil.genxin, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
Log.d("+++++++++响哥1", String.valueOf(list.get(position).getStatus()));
presenter.getDingUrl(ApiUtil.dingdan,page);
}
}
});
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
});
}else if (list.get(position).getStatus()==1){
holder.text_daizhifu.setText("已支付");
holder.text_daizhifu.setTextColor(Color.BLACK);
holder.text_btn.setText("查看订单");
}else if (list.get(position).getStatus()==2){
holder.text_daizhifu.setText("已取消");
holder.text_daizhifu.setTextColor(Color.BLACK);
holder.text_btn.setText("查看订单");
holder.text_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage("确定循环利用吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Map<String, String> params = new HashMap<>();
params.put("uid", "3690");
params.put("orderId", String.valueOf(list.get(position).getOrderid()));
params.put("status", String.valueOf(0));
OkHttp3Util.doPost(ApiUtil.genxin, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.d("+++++++++响哥", String.valueOf(list.get(position).getStatus()));
presenter.getDingUrl(ApiUtil.dingdan, page);
}
}
});
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
}
这是application类
package com.example.mychewugou.application;
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Process;
/**
* Created by hasee on 2018/1/4.
*/
public class EApplication extends Application{
private static Context context;
private static Handler handler;
private static int mainId;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
//初始化handler
handler = new Handler();
//主线程的id
mainId = Process.myTid();
}
/**
* 对外提供了context
* @return
*/
public static Context getAppContext() {
return context;
}
/**
* 得到全局的handler
* @return
*/
public static Handler getAppHanler() {
return handler;
}
/**
* 获取主线程id
* @return
*/
public static int getMainThreadId() {
return mainId;
}
}
这是待支付Fragment
package com.example.mychewugou.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import com.example.mychewugou.R;
import com.example.mychewugou.adapter.MyDingDanAdapter;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.view.Maindingdan;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.ArrayList;
import java.util.List;
public class Frag_Daizhi extends Fragment implements Maindingdan {
private List<MyDataDingDanBean.DataBean> list = new ArrayList<>();
private View view;
private RecyclerView recycler_daizhi;
private Presenterdingdanq presenter;
private RelativeLayout relative_bar;
private SmartRefreshLayout smart_refresh;
private int page=0;
private MyDingDanAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.frag_daizhi, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recycler_daizhi = view.findViewById(R.id.recycler_daizhi);
relative_bar = view.findViewById(R.id.relative_bar);
smart_refresh = view.findViewById(R.id.smart_refresh);
presenter = new Presenterdingdanq(this);
}
@Override
public void onResume() {
super.onResume();
relative_bar.setVisibility(View.VISIBLE);
presenter.getDingUrl(ApiUtil.dingdan,page);
}
@Override
public void getDingDanBean(final MyDataDingDanBean myDingDanBean) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (myDingDanBean!=null){
list.addAll(myDingDanBean.getData());
myAdapter();
relative_bar.setVisibility(View.GONE);
smart_refresh.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
list.clear();
list.addAll(0,myDingDanBean.getData());
myAdapter();
smart_refresh.finishRefresh();
}
});
smart_refresh.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
list.clear();
page++;
presenter.getDingUrl(ApiUtil.dingdan,page);
onResume();
list.addAll(myDingDanBean.getData());
myAdapter();
smart_refresh.finishLoadmore();
}
});
}
}
});
}
public void myAdapter(){
if (adapter==null){
recycler_daizhi.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
adapter = new MyDingDanAdapter(getActivity(), list,presenter,page);
recycler_daizhi.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}
}
这是已支付Fragment
package com.example.mychewugou.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.mychewugou.R;
public class Frag_YiZhi extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.frag_yizhi, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
这是已取消Fragment
package com.example.mychewugou.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.mychewugou.R;
public class Frag_YiQu extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.frag_yiqu, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
这是订单的Holder
package com.example.mychewugou.holder;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.example.mychewugou.R;
public class MyDingDanHolder extends RecyclerView.ViewHolder {
public TextView text_title;
public TextView text_daizhifu;
public TextView text_price;
public TextView text_tame;
public TextView text_btn;
public MyDingDanHolder(View itemView) {
super(itemView);
text_title = itemView.findViewById(R.id.text_title);
text_daizhifu = itemView.findViewById(R.id.text_daizhifu);
text_price = itemView.findViewById(R.id.text_price);
text_tame = itemView.findViewById(R.id.text_tame);
text_btn = itemView.findViewById(R.id.text_btn);
}
}
订单的MOLDE层
package com.example.mychewugou.model;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class DingdanModel {
private Presenterdingdanq presenter;
public DingdanModel(Presenterdingdanq presenter) {
this.presenter = presenter;
}
public void getDingUrl(String dingdan, int page) {
Map<String, String> params=new HashMap<>();
params.put("uid","2809");
params.put("page",page+"");
OkHttp3Util.doPost(dingdan, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
String json = response.body().string();
MyDataDingDanBean myDingDanBean = new Gson().fromJson(json, MyDataDingDanBean.class);
presenter.getDingDanBean(myDingDanBean);
}
}
});
}
}
购物车的Model
package com.example.mychewugou.model;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.presenter.CartPresenter_I;
import com.example.mychewugou.util.CommonUtils;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by hasee on 2018/1/15.
*/
public class CartModel {
private CartPresenter_I cartPresenter_i;
public CartModel(CartPresenter cartPresenter_i) {
this.cartPresenter_i=cartPresenter_i;
}
public void getData(String cartUrl) {
OkHttp3Util.doGet(cartUrl, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String json = response.body().string();
CommonUtils.runOnUIThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
CartBean cartBean = gson.fromJson(json, CartBean.class);
cartPresenter_i.getSuccessCartJson(cartBean);
}
});
}
}
});
}
}
购物车的中间者
package com.example.mychewugou.presenter;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.model.CartModel;
import com.example.mychewugou.view.CartMainView;
import com.example.mychewugou.view.MainActivity;
/**
* Created by hasee on 2018/1/15.
*/
public class CartPresenter implements CartPresenter_I{
private CartModel cartModel;
private CartMainView cacartMainView;
public CartPresenter(MainActivity cartMainView) {
this.cacartMainView = cartMainView;
cartModel = new CartModel(this);
}
public void getData(String cartUrl) {
cartModel.getData(cartUrl);
}
@Override
public void getSuccessCartJson(CartBean cartBean) {
cacartMainView.getSuccessCartJson(cartBean);
}
}
购物车中间者的接口
package com.example.mychewugou.presenter;
import com.example.mychewugou.bean.CartBean;
/**
* Created by hasee on 2018/1/15.
*/
public interface CartPresenter_I {
void getSuccessCartJson(CartBean cartBean);
}
订单的中间者
package com.example.mychewugou.presenter;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.fragment.Frag_Daizhi;
import com.example.mychewugou.model.DingdanModel;
import com.example.mychewugou.view.Maindingdan;
public class Presenterdingdanq implements PresenterPortdingdan {
private Maindingdan main;
private final DingdanModel model;
public Presenterdingdanq(Frag_Daizhi main) {
model = new DingdanModel(this);
this.main = main;
}
@Override
public void getDingDanBean(MyDataDingDanBean myDingDanBean) {
main.getDingDanBean(myDingDanBean);
}
public void getDingUrl(String dingdan, int page) {
model.getDingUrl(dingdan,page);
}
}
订单的中间者接口
package com.example.mychewugou.presenter;
import com.example.mychewugou.bean.MyDataDingDanBean;
public interface PresenterPortdingdan {
void getDingDanBean(MyDataDingDanBean myDingDanBean);
}
API工具类
package com.example.mychewugou.util;
/**
* Created by Dash on 2017/12/6.
*/
public class ApiUtil {
public static final String cartUrl = "https://www.zhaoapi.cn/product/getCarts?uid=2809";
public static final String addCartUrl = "https://www.zhaoapi.cn/product/addCart";//uid,pid
public static final String deleteCartUrl = "https://www.zhaoapi.cn/product/deleteCart";//uid,pid
//?uid=71&sellerid=1&pid=1&selected=0&num=10
public static final String updateCartUrl = "https://www.zhaoapi.cn/product/updateCarts";
public static final String createCartUrl = "https://www.zhaoapi.cn/product/createOrder";
public static String dingdan="https://www.zhaoapi.cn/product/getOrders";
//uid 用户id字段 String类型 必传
//orderId 订单id参数 String类型 必传
//status 订单状态 String类型 必传
public static String genxin="https://www.zhaoapi.cn/product/updateOrder";
}
CommonUtils这个工具类
package com.example.mychewugou.util;
/**
* Created by Dash
*/
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.example.mychewugou.application.EApplication;
/**
* Created by Dash
*/
public class CommonUtils {
public static final String TAG = "Dash";//sp文件的xml名称
private static SharedPreferences sharedPreferences;
/**
* DashApplication.getAppContext()可以使用,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用
* @param layoutId
* @return
*/
public static View inflate(int layoutId) {
View view = View.inflate(EApplication.getAppContext(), layoutId, null);
return view;
}
/**
* dip---px
*
* @param dip 设备独立像素device independent px....1dp = 3px 1dp = 2px 1dp = 1.5px
* @return
*/
public static int dip2px(int dip) {
//获取像素密度
float density = EApplication.getAppContext().getResources().getDisplayMetrics().density;
//
int px = (int) (dip * density + 0.5f);//100.6
return px;
}
/**
* px-dip
*
* @param px
* @return
*/
public static int px2dip(int px) {
//获取像素密度
float density = EApplication.getAppContext().getResources().getDisplayMetrics().density;
//
int dip = (int) (px / density + 0.5f);
return dip;
}
/**
* 获取资源中的字符串
* @param stringId
* @return
*/
public static String getString(int stringId) {
return EApplication.getAppContext().getResources().getString(stringId);
}
public static Drawable getDrawable(int did) {
return EApplication.getAppContext().getResources().getDrawable(did);
}
public static int getDimens(int id) {
return EApplication.getAppContext().getResources().getDimensionPixelSize(id);
}
/**
* sp存入字符串类型的值
* @param flag
* @param str
*/
public static void saveSp(String flag, String str) {
if (sharedPreferences == null) {
sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
}
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString(flag, str);
edit.commit();
}
public static String getSp(String flag) {
if (sharedPreferences == null) {
sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
}
return sharedPreferences.getString(flag, "");
}
public static boolean getBoolean(String tag) {
if (sharedPreferences == null) {
sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
}
return sharedPreferences.getBoolean(tag, false);
}
public static void putBoolean(String tag, boolean content) {
if (sharedPreferences == null) {
sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
}
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putBoolean(tag, content);
edit.commit();
}
/**
* 清除sp数据
* @param tag
*/
public static void clearSp(String tag) {
if (sharedPreferences == null) {
sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
}
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.remove(tag);
edit.commit();
}
/**
* 自己写的运行在主线程的方法
* 如果是主线程,执行任务,否则使用handler发送到主线程中去执行
*
*
* @param runable
*/
public static void runOnUIThread(Runnable runable) {
//先判断当前属于子线程还是主线程
if (android.os.Process.myTid() == EApplication.getMainThreadId()) {
runable.run();
} else {
//子线程
EApplication.getAppHanler().post(runable);
}
}
}
图片的工具类
package com.example.mychewugou.util;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;
import com.youth.banner.loader.ImageLoaderInterface;
/**
* Created by hasee on 2018/1/16.
*/
public class GlideImageLoader extends ImageLoader{
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}
OK3工具类
package com.example.mychewugou.util;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* Created by Dash on 2017/12/8.
*/
public class OkHttp3Util {
/**
* 懒汉 安全 加同步
* 私有的静态成员变量 只声明不创建
* 私有的构造方法
* 提供返回实例的静态方法
*/
private static OkHttpClient okHttpClient = null;
private OkHttp3Util() {
}
public static OkHttpClient getInstance() {
if (okHttpClient == null) {
//加同步安全
synchronized (OkHttp3Util.class) {
if (okHttpClient == null) {
//okhttp可以缓存数据....指定缓存路径
File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
//指定缓存大小
int cacheSize = 10 * 1024 * 1024;
okHttpClient = new OkHttpClient.Builder()//构建器
.connectTimeout(15, TimeUnit.SECONDS)//连接超时
.writeTimeout(20, TimeUnit.SECONDS)//写入超时
.readTimeout(20, TimeUnit.SECONDS)//读取超时
//.addInterceptor(new CommonParamsInterceptor())//添加的是应用拦截器...公共参数
//.addNetworkInterceptor(new CacheInterceptor())//添加的网络拦截器
.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
.build();
}
}
}
return okHttpClient;
}
/**
* get请求
* 参数1 url
* 参数2 回调Callback
*/
public static void doGet(String oldUrl, Callback callback) {
//要添加的公共参数...map
Map<String,String> map = new HashMap<>();
map.put("source","android");
StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder
stringBuilder.append(oldUrl);
if (oldUrl.contains("?")){
//?在最后面....2类型
if (oldUrl.indexOf("?") == oldUrl.length()-1){
}else {
//3类型...拼接上&
stringBuilder.append("&");
}
}else {
//不包含? 属于1类型,,,先拼接上?号
stringBuilder.append("?");
}
//添加公共参数....
for (Map.Entry<String,String> entry: map.entrySet()) {
//拼接
stringBuilder.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
//删掉最后一个&符号
if (stringBuilder.indexOf("&") != -1){
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
}
String newUrl = stringBuilder.toString();//新的路径
//创建OkHttpClient请求对象
OkHttpClient okHttpClient = getInstance();
//创建Request
Request request = new Request.Builder().url(newUrl).build();
//得到Call对象
Call call = okHttpClient.newCall(request);
//执行异步请求
call.enqueue(callback);
}
/**
* post请求
* 参数1 url
* 参数2 Map<String, String> params post请求的时候给服务器传的数据
* add..("","")
* add()
*/
public static void doPost(String url, Map<String, String> params, Callback callback) {
//要添加的公共参数...map
Map<String,String> map = new HashMap<>();
map.put("source","android");
//创建OkHttpClient请求对象
OkHttpClient okHttpClient = getInstance();
//3.x版本post请求换成FormBody 封装键值对参数
FormBody.Builder builder = new FormBody.Builder();
//遍历集合
for (String key : params.keySet()) {
builder.add(key, params.get(key));
}
//添加公共参数
for (Map.Entry<String,String> entry: map.entrySet()) {
builder.add(entry.getKey(),entry.getValue());
}
//创建Request
Request request = new Request.Builder().url(url).post(builder.build()).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
/**
* post请求上传文件....包括图片....流的形式传任意文件...
* 参数1 url
* file表示上传的文件
* fileName....文件的名字,,例如aaa.jpg
* params ....传递除了file文件 其他的参数放到map集合
*
*/
public static void uploadFile(String url, File file, String fileName,Map<String,String> params) {
//创建OkHttpClient请求对象
OkHttpClient okHttpClient = getInstance();
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
//参数
if (params != null){
for (String key : params.keySet()){
builder.addFormDataPart(key,params.get(key));
}
}
//文件...参数name指的是请求路径中所接受的参数...如果路径接收参数键值是fileeeee,此处应该改变
builder.addFormDataPart("file",fileName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
//构建
MultipartBody multipartBody = builder.build();
//创建Request
Request request = new Request.Builder().url(url).post(multipartBody).build();
//得到Call
Call call = okHttpClient.newCall(request);
//执行请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("upload",e.getLocalizedMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//上传成功回调 目前不需要处理
if (response.isSuccessful()){
String s = response.body().string();
Log.e("upload","上传--"+s);
}
}
});
}
/**
* Post请求发送JSON数据....{"name":"zhangsan","pwd":"123456"}
* 参数一:请求Url
* 参数二:请求的JSON
* 参数三:请求回调
*/
public static void doPostJson(String url, String jsonParams, Callback callback) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
/**
* 下载文件 以流的形式把apk写入的指定文件 得到file后进行安装
* 参数er:请求Url
* 参数san:保存文件的文件夹....download
*/
public static void download(final Activity context, final String url, final String saveDir) {
Request request = new Request.Builder().url(url).build();
Call call = getInstance().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//com.orhanobut.logger.Logger.e(e.getLocalizedMessage());
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
try {
is = response.body().byteStream();//以字节流的形式拿回响应实体内容
//apk保存路径
final String fileDir = isExistDir(saveDir);
//文件
File file = new File(fileDir, getNameFromUrl(url));
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
context.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "下载成功:" + fileDir + "," + getNameFromUrl(url), Toast.LENGTH_SHORT).show();
}
});
//apk下载完成后 调用系统的安装方法
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
context.startActivity(intent);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) is.close();
if (fos != null) fos.close();
}
}
});
}
/**
* 判断下载目录是否存在......并返回绝对路径
*
* @param saveDir
* @return
* @throws IOException
*/
public static String isExistDir(String saveDir) throws IOException {
// 下载位置
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir);
if (!downloadFile.mkdirs()) {
downloadFile.createNewFile();
}
String savePath = downloadFile.getAbsolutePath();
Log.e("savePath", savePath);
return savePath;
}
return null;
}
/**
* @param url
* @return 从下载连接中解析出文件名
*/
private static String getNameFromUrl(String url) {
return url.substring(url.lastIndexOf("/") + 1);
}
/**
* 公共参数拦截器
*/
private static class CommonParamsInterceptor implements Interceptor{
//拦截的方法
@Override
public Response intercept(Chain chain) throws IOException {
//获取到请求
Request request = chain.request();
//获取请求的方式
String method = request.method();
//获取请求的路径
String oldUrl = request.url().toString();
Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent"));
//要添加的公共参数...map
Map<String,String> map = new HashMap<>();
map.put("source","android");
if ("GET".equals(method)){
// 1.http://www.baoidu.com/login --------? key=value&key=value
// 2.http://www.baoidu.com/login? --------- key=value&key=value
// 3.http://www.baoidu.com/login?mobile=11111 -----&key=value&key=value
StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder
stringBuilder.append(oldUrl);
if (oldUrl.contains("?")){
//?在最后面....2类型
if (oldUrl.indexOf("?") == oldUrl.length()-1){
}else {
//3类型...拼接上&
stringBuilder.append("&");
}
}else {
//不包含? 属于1类型,,,先拼接上?号
stringBuilder.append("?");
}
//添加公共参数....
for (Map.Entry<String,String> entry: map.entrySet()) {
//拼接
stringBuilder.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
//删掉最后一个&符号
if (stringBuilder.indexOf("&") != -1){
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
}
String newUrl = stringBuilder.toString();//新的路径
//拿着新的路径重新构建请求
request = request.newBuilder()
.url(newUrl)
.build();
}else if ("POST".equals(method)){
//先获取到老的请求的实体内容
RequestBody oldRequestBody = request.body();//....之前的请求参数,,,需要放到新的请求实体内容中去
//如果请求调用的是上面doPost方法
if (oldRequestBody instanceof FormBody){
FormBody oldBody = (FormBody) oldRequestBody;
//构建一个新的请求实体内容
FormBody.Builder builder = new FormBody.Builder();
//1.添加老的参数
for (int i=0;i<oldBody.size();i++){
builder.add(oldBody.name(i),oldBody.value(i));
}
//2.添加公共参数
for (Map.Entry<String,String> entry:map.entrySet()) {
builder.add(entry.getKey(),entry.getValue());
}
FormBody newBody = builder.build();//新的请求实体内容
//构建一个新的请求
request = request.newBuilder()
.url(oldUrl)
.post(newBody)
.build();
}
}
Response response = chain.proceed(request);
return response;
}
}
/**
* 网络缓存的拦截器......注意在这里更改cache-control头是很危险的,一般客户端不进行更改,,,,服务器端直接指定
*
* 没网络取缓存的时候,一般都是在数据库或者sharedPerfernce中取出来的
*
*
*
*/
/*private static class CacheInterceptor implements Interceptor{
@Override
public Response intercept(Chain chain) throws IOException {
//老的响应
Response oldResponse = chain.proceed(chain.request());
*//*if (NetUtils.isNetworkConnected(DashApplication.getAppContext())){
int maxAge = 120; // 在线缓存在2分钟内可读取
return oldResponse.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
}else {
int maxStale = 60 * 60 * 24 * 14; // 离线时缓存保存2周
return oldResponse.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.build();
}*//*
}
}*/
}
购物车的自定义二级列表
package com.example.mychewugou.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ExpandableListView;
/**
* Created by hasee on 2018/1/15.
*/
public class CartExpanableListview extends ExpandableListView {
public CartExpanableListview(Context context) {
super(context);
}
public CartExpanableListview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CartExpanableListview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
购物车的接口
package com.example.mychewugou.view;
import com.example.mychewugou.bean.CartBean;
/**
* Created by hasee on 2018/1/15.
*/
public interface CartMainView {
void getSuccessCartJson(CartBean cartBean);
}
订单的Activity
package com.example.mychewugou.view;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.example.mychewugou.R;
import com.example.mychewugou.fragment.Frag_Daizhi;
import com.example.mychewugou.fragment.Frag_YiQu;
import com.example.mychewugou.fragment.Frag_YiZhi;
public class DingDanActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView image_btn;
private TextView text_daizhi;
private TextView text_yizhi;
private TextView text_yiqu;
private FrameLayout frame_layout;
private View item_popup;
private View view;
private PopupWindow popupWindow;
private TextView btn_daizhi;
private TextView btn_yizhi;
private TextView btn_yiqu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ding_dan);
image_btn = findViewById(R.id.image_btn);
text_daizhi = findViewById(R.id.text_daizhi);
text_yizhi = findViewById(R.id.text_yizhi);
text_yiqu = findViewById(R.id.text_yiqu);
frame_layout = findViewById(R.id.frame_layout);
text_daizhi.setOnClickListener(this);
text_yizhi.setOnClickListener(this);
text_yiqu.setOnClickListener(this);
Frag_Daizhi frag_daizhi = new Frag_Daizhi();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_daizhi).commit();
item_popup = View.inflate(this, R.layout.item_popup, null);
view = View.inflate(this, R.layout.activity_ding_dan, null);
popupWindow = new PopupWindow(item_popup
, ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT);
popupWindow.setTouchable(true);
btn_daizhi = item_popup.findViewById(R.id.btn_daizhi);
btn_yizhi = item_popup.findViewById(R.id.btn_yizhi);
btn_yiqu = item_popup.findViewById(R.id.btn_yiqu);
btn_daizhi.setOnClickListener(this);
btn_yizhi.setOnClickListener(this);
btn_yiqu.setOnClickListener(this);
image_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//popupWindow.showAtLocation(view, Gravity.BOTTOM,0,0);
popupWindow.showAsDropDown(image_btn);
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.text_daizhi:
Frag_Daizhi frag_daizhi = new Frag_Daizhi();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_daizhi).commit();
break;
case R.id.text_yizhi:
Frag_YiZhi frag_yiZhi = new Frag_YiZhi();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_yiZhi).commit();
break;
case R.id.text_yiqu:
Frag_YiQu frag_yiQu = new Frag_YiQu();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_yiQu).commit();
break;
case R.id.btn_daizhi:
Frag_Daizhi frag_daizhi2 = new Frag_Daizhi();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_daizhi2).commit();
popupWindow.dismiss();
break;
case R.id.btn_yizhi:
Frag_YiZhi frag_yiZhi2 = new Frag_YiZhi();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_yiZhi2).commit();
popupWindow.dismiss();
break;
case R.id.btn_yiqu:
Frag_YiQu frag_yiQu2 = new Frag_YiQu();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,frag_yiQu2).commit();
popupWindow.dismiss();
break;
}
}
}
主页面的Activity
package com.example.mychewugou.view;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.mychewugou.R;
import com.example.mychewugou.adapter.MyAdapter;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.bean.CountPriceBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.util.ApiUtil;
public class MainActivity extends AppCompatActivity implements View.OnClickListener,CartMainView {
private CartExpanableListview expanableListview;
private CheckBox check_all;
private TextView text_total;
private TextView text_buy;
private RelativeLayout relative_progress;
private LinearLayout linear_bottom;
private CartPresenter cartPresenter;
private CartBean cartBean;
private MyAdapter myAdapter;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0){
CountPriceBean countPriceBean = (CountPriceBean) msg.obj;
text_total.setText("合计:¥"+countPriceBean.getPriceString());
text_buy.setText("去结算("+countPriceBean.getCount()+")");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
check_all = findViewById(R.id.check_all);
text_total = findViewById(R.id.text_total);
text_buy = findViewById(R.id.text_buy);
expanableListview = findViewById(R.id.expanable_listview);
relative_progress = findViewById(R.id.relative_progress);
linear_bottom = findViewById(R.id.linear_layout);
//去掉默认的指示器
expanableListview.setGroupIndicator(null);
check_all.setOnClickListener(this);
text_buy.setOnClickListener(this);
cartPresenter = new CartPresenter(this);
}
@Override
protected void onResume() {
super.onResume();
relative_progress.setVisibility(View.VISIBLE);
// 请求数据
cartPresenter.getData(ApiUtil.cartUrl);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.check_all:
myAdapter.setAllChildState(check_all.isChecked());
break;
case R.id.text_buy://去结算...试一下创建订单
Intent intent = new Intent(MainActivity.this,DingDanActivity.class);
startActivity(intent);
break;
}
}
@Override
public void getSuccessCartJson(CartBean cartBean) {
relative_progress.setVisibility(View.GONE);
this.cartBean = cartBean;
if (cartBean!=null){
linear_bottom.setVisibility(View.VISIBLE);
for (int i = 0;i<cartBean.getData().size();i++){
if (isAllChildInGroupSelected(i)){
cartBean.getData().get(i).setGroupChecked(true);
}
}
check_all.setChecked(isAllGroupChecked());
//设置适配器
myAdapter = new MyAdapter(MainActivity.this, cartBean,handler,cartPresenter,relative_progress);
expanableListview.setAdapter(myAdapter);
//展开
for (int i= 0;i<cartBean.getData().size();i++){
expanableListview.expandGroup(i);
}
//3.根据子条目是否选中 初始化价格和数量
myAdapter.sendPriceAndCount();
}else {
//隐藏下面的全选.... 等
linear_bottom.setVisibility(View.GONE);
//显示去逛逛,,,添加购物车
Toast.makeText(MainActivity.this,"购物车为空,去逛逛",Toast.LENGTH_SHORT).show();
}
}
private boolean isAllGroupChecked() {
for (int i =0;i<cartBean.getData().size();i++){
if (! cartBean.getData().get(i).isGroupChecked()){//代表一级列表有没选中的
return false;
}
}
return true;
}
private boolean isAllChildInGroupSelected(int groupPosition) {
for (int i=0;i<cartBean.getData().get(groupPosition).getList().size();i++){
if (cartBean.getData().get(groupPosition).getList().get(i).getSelected() ==0){
return false;
}
}
return true;
}
}
订单的接口
package com.example.mychewugou.view;
import com.example.mychewugou.bean.MyDataDingDanBean;
public interface Maindingdan {
void getDingDanBean(MyDataDingDanBean myDingDanBean);
}
欢迎页面
package com.example.mychewugou.view;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.example.mychewugou.R;
public class WelcomActivity extends AppCompatActivity {
private ImageView imageView;
/* Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Intent intent=new Intent(WelcomActivity.this,XiangQingActivity.class);
startActivity(intent);
finish();
}
};*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcom);
imageView = findViewById(R.id.image_view);
ObjectAnimator y = ObjectAnimator.ofFloat(imageView, "Y", 0, 500, 800, 1000);
ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 0.5f, 1);
ObjectAnimator rotationX = ObjectAnimator.ofFloat(imageView, "rotationX", 0,90,180,270, 360);
ObjectAnimator rotationY = ObjectAnimator.ofFloat(imageView, "rotationY", 0,90,180,270, 360);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 0.5f, 2);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 0.5f, 2);
//组合
AnimatorSet animatorSet = new AnimatorSet();
//放到一起
// animatorSet.play(y).with(alpha).with(scaleX).with(scaleY).with(rotationX);
animatorSet.play(y).with(alpha).with(rotationX).with(rotationY).with(scaleX).with(scaleY);
animatorSet.setDuration(3000);
animatorSet.start();
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
//动画结束跳转页面
Intent intent=new Intent(WelcomActivity.this,XiangQingActivity.class);
startActivity(intent);
finish();
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
}
}
详情页面
package com.example.mychewugou.view;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.example.mychewugou.R;
import com.example.mychewugou.bean.AddBean;
import com.example.mychewugou.bean.GoodsBean;
import com.example.mychewugou.util.GlideImageLoader;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;
import com.youth.banner.Banner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class XiangQingActivity extends AppCompatActivity {
private Banner xq_banner;
private TextView xq_title,xq_price01,xq_price02;
private List<String> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xiang_qing);
xq_banner = findViewById(R.id.xq_banner);
xq_title = findViewById(R.id.xq_title);
xq_price01 = findViewById(R.id.xq_price01);
xq_price02 = findViewById(R.id.xq_price02);
OkHttp3Util.doGet("https://www.zhaoapi.cn/product/getProductDetail?pid=15", new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String json = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class);
String title = goodsBean.getData().getTitle();
double bargainPrice = goodsBean.getData().getBargainPrice();
double price = goodsBean.getData().getPrice();
String images = goodsBean.getData().getImages();
String[] split = images.split("\\|");
for (String str :split){
list.add(str);
}
//xq_banner.setBannerStyle(Banner.AUTOFILL_TYPE_LIST);//设置图片的样式
xq_banner.setImageLoader(new GlideImageLoader());
xq_banner.setImages(list);
xq_banner.isAutoPlay(false);
xq_banner.start();
xq_title.setText(title);
xq_price01.setText("原价:¥"+price+"");
xq_price02.setText("优惠价:¥"+bargainPrice+"");
}
});
}
}
});
}
public void addCart(View view) {
OkHttp3Util.doGet("https://www.zhaoapi.cn/product/addCart?pid=15&uid=2809", new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String string = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
AddBean addBean = gson.fromJson(string, AddBean.class);
Toast.makeText(XiangQingActivity.this,"状态:"+addBean.getMsg(),Toast.LENGTH_SHORT).show();
}
});
}
}
});
}
public void cart(View view) {
Intent intent = new Intent(XiangQingActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
}
订单的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
android:orientation="vertical"
tools:context="com.example.mychewugou.view.DingDanActivity">
<RelativeLayout
android:background="#fff"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="20sp"
android:text="订单列表"/>
<ImageView
android:id="@+id/image_btn"
android:layout_width="25dp"
android:layout_height="25dp"
android:clickable="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:background="@drawable/lv_icon"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text_daizhi"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="match_parent"
android:textSize="16sp"
android:background="@drawable/biankuang"
android:text="待支付"/>
<TextView
android:id="@+id/text_yizhi"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="match_parent"
android:textSize="16sp"
android:background="@drawable/biankuang"
android:text="已支付"/>
<TextView
android:id="@+id/text_yiqu"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="match_parent"
android:textSize="16sp"
android:background="@drawable/biankuang"
android:text="已取消"/>
</LinearLayout>
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>
</LinearLayout>
购物车的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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="com.example.mychewugou.view.MainActivity">
<ScrollView
android:layout_above="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.mychewugou.view.CartExpanableListview
android:id="@+id/expanable_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"></com.example.mychewugou.view.CartExpanableListview>
<LinearLayout
android:layout_marginTop="20dp"
android:orientation="vertical"
android:background="#00ff00"
android:layout_width="match_parent"
android:layout_height="500dp">
</LinearLayout>
</LinearLayout>
</ScrollView>
<RelativeLayout
android:visibility="gone"
android:layout_above="@id/linear_layout"
android:id="@+id/relative_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ProgressBar
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<LinearLayout
android:id="@+id/linear_layout"
android:layout_alignParentBottom="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<CheckBox
android:layout_marginLeft="10dp"
android:id="@+id/check_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_total"
android:text="合计:¥0.00"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:text="去结算(0)"
android:background="#ff0000"
android:textColor="#ffffff"
android:gravity="center"
android:id="@+id/text_buy"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
</LinearLayout>
</RelativeLayout>
欢迎页面的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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="com.example.mychewugou.view.WelcomActivity">
<ImageView
android:layout_centerHorizontal="true"
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher_round" />
</RelativeLayout>
详情页面的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
android:orientation="vertical"
tools:context="com.example.mychewugou.view.XiangQingActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="详情界面"
android:textSize="25sp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@mipmap/ic_launcher_round"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_above="@+id/xq_linear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.youth.banner.Banner
android:id="@+id/xq_banner"
android:layout_width="match_parent"
android:layout_height="300dp">
</com.youth.banner.Banner>
<TextView
android:id="@+id/xq_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title"/>
<TextView
android:id="@+id/xq_price01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="price01"/>
<TextView
android:id="@+id/xq_price02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="price02"/>
</LinearLayout>
<LinearLayout
android:id="@+id/xq_linear"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true">
<Button
android:onClick="cart"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="购物车"/>
<Button
android:onClick="addCart"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="加入购物车"/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
二级列表的子布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="10dp"
android:layout_marginLeft="10dp"
android:layout_height="match_parent">
<CheckBox
android:layout_centerVertical="true"
android:id="@+id/check_child"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_good"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/check_child"
android:layout_marginLeft="10dp"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/ic_launcher_round"/>
<TextView
android:id="@+id/text_title"
android:layout_toRightOf="@+id/image_good"
android:layout_marginLeft="10dp"
android:layout_alignTop="@+id/image_good"
android:maxLines="2"
android:minLines="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"/>
<TextView
android:id="@+id/text_price"
android:layout_toRightOf="@+id/image_good"
android:layout_marginLeft="10dp"
android:layout_alignBottom="@+id/image_good"
android:text="¥99.99"
android:textColor="#ff0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_delete"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linearLayout"
android:layout_toLeftOf="@+id/linearLayout"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:background="#ff0000"
android:gravity="center"
android:text="删除"
android:textColor="#ffffff" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/image_good"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_jian"
android:text="一"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:id="@+id/text_num"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:id="@+id/text_add"
android:text="十"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
二级列表的父布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp"
android:gravity="center_vertical">
<CheckBox
android:id="@+id/check_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginLeft="10dp"
android:text="京东自营"
android:id="@+id/text_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
订单页面适配器的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text_title"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="bottom"
android:layout_height="match_parent"
android:text="1111"/>
<TextView
android:id="@+id/text_daizhifu"
android:layout_width="50dp"
android:gravity="bottom"
android:layout_height="match_parent"
android:textColor="#ff0000"
android:text="待支付"/>
</LinearLayout>
<TextView
android:id="@+id/text_price"
android:gravity="bottom"
android:textColor="#ff0000"
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="1111"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text_tame"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="bottom"
android:layout_height="match_parent"
android:text="1111"/>
<TextView
android:id="@+id/text_btn"
android:layout_width="70dp"
android:gravity="center"
android:layout_gravity="bottom"
android:layout_height="30dp"
android:background="@drawable/biankuang"
android:text="取消订单"/>
</LinearLayout>
<TextView
android:layout_marginTop="15dp"
android:clickable="true"
android:focusable="false"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#9999"/>
</LinearLayout>
自定义对话框的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="100dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/btn_daizhi"
android:layout_width="match_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_height="0dp"
android:textSize="16sp"
android:padding="15dp"
android:background="@drawable/select_dianji"
android:text="待支付"/>
<TextView
android:id="@+id/btn_yizhi"
android:layout_width="match_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_height="0dp"
android:textSize="16sp"
android:padding="15dp"
android:background="@drawable/select_dianji"
android:text="已支付"/>
<TextView
android:id="@+id/btn_yiqu"
android:layout_width="match_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_height="0dp"
android:textSize="16sp"
android:padding="15dp"
android:background="@drawable/select_dianji"
android:text="已取消"/>
</LinearLayout>
</RelativeLayout>