public class MainActivity extends AppCompatActivity implements View.OnClickListener ,ICart{ private ExpandableListView el; private CheckBox isck; private TextView price; private TextView del; private TextView jiesuan; private CartPresentr cartPresentr; private List<CartBean.DataBean> data; private List<CartBean.DataBean.ListBean> childlist=new ArrayList<CartBean.DataBean.ListBean>(); private List<CartBean.DataBean.ListBean> childlists=new ArrayList<CartBean.DataBean.ListBean>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); cartPresentr = new CartPresentr(this); getDataFromNet(); } private void getDataFromNet() { cartPresentr.setPath(Api.BaseUrl,"2775"); } private void initView() { el = (ExpandableListView) findViewById(R.id.el); isck = (CheckBox) findViewById(R.id.isck); price = (TextView) findViewById(R.id.price); del = (TextView) findViewById(R.id.del); jiesuan = (TextView) findViewById(R.id.jiesuan); isck.setOnClickListener(this); del.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.isck: childlist.clear(); for (int i=0;i<data.size();i++){ List<CartBean.DataBean.ListBean> list= data.get(i).getList(); for (int j=0;j<list.size();j++){ childlist.add(list.get(j)); } } changAllState(); changePriceAndNum(); break; case R.id.del: childlist.clear(); for (int i=0;i<data.size();i++){ List<CartBean.DataBean.ListBean> list= data.get(i).getList(); for (int j=0;j<list.size();j++){ if (list.get(j).getSelected()==1){ childlist.add(list.get(j)); } } } changeStateBydel(); changePriceAndNum(); break; } } private void changeStateBydel() { List<Observable> observables=new ArrayList<>(); for (int j=0;j<childlist.size();j++){ Map<String,String> map=new HashMap<>(); map.put("uid","2775"); map.put("pid",String.valueOf(childlist.get(j).getPid())); Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).delData(map); observables.add(observable); Log.d("MainActivity", "map:" + map); } Observable.merge(observables.toArray(new Observable[childlist.size()])) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1() { @Override public void call(Object o) { getDataFromNet(); } }); } private void changAllState() { List<Observable> observables=new ArrayList<>(); for (int j=0;j<childlist.size();j++){ Map<String,String> map=new HashMap<>(); map.put("uid","2775"); map.put("sellerid",String.valueOf(childlist.get(j).getSellerid())); map.put("pid",String.valueOf(childlist.get(j).getPid())); map.put("num",String.valueOf(childlist.get(j).getNum())); map.put("selected",String.valueOf(isck.isChecked()?1:0)); Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map); observables.add(observable); Log.d("MainActivity", "map:" + map); } Observable.merge(observables.toArray(new Observable[childlist.size()])) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1() { @Override public void call(Object o) { getDataFromNet(); } }); } @Override public void success(CartBean cartBean) { // Log.i("pppppppmain",cartBean.getMsg()); if (cartBean==null&&data!=null){ data.clear(); }else { data = cartBean.getData(); } setAdapter(); } private void setAdapter() { //改变全选的状态 isck.setChecked(childIsChick()); //改变组的状态 for (int j=0;j<data.size();j++){ data.get(j).setGroupIsck(childIsAllCheck(data.get(j).getList())); } CartAdapter cartAdapter= new CartAdapter(MainActivity.this, data); el.setAdapter(cartAdapter); for (int i=0;i<data.size();i++){ el.expandGroup(i); } cartAdapter.setLinstner(new IPosition() { @Override public void getGroup(int group, Boolean b) { Log.d("MainActivity1", "data.get(group).getList().size():" + data.get(group).getList().size()); changeStateByGroup(data.get(group).getList(),b); changePriceAndNum(); } @Override public void getChild(int group, int child, Boolean b) { childlists.clear(); CartBean.DataBean.ListBean listBean= data.get(group).getList().get(child); childlists.add(listBean); changeStateByChild(b); changePriceAndNum(); } @Override public void onChildNumberAddOrSub(int group, int child, int value) { childlists.clear(); CartBean.DataBean.ListBean listBean= data.get(group).getList().get(child); childlists.add(listBean); changeStateByNum(value); changePriceAndNum(); } }); changePriceAndNum(); } private void changeStateByNum(int value) { Observable[] observables=new Observable[childlists.size()]; for (int j=0;j<childlists.size();j++){ Map<String,String> map=new HashMap<>(); map.put("uid","2775"); map.put("sellerid",String.valueOf(childlists.get(j).getSellerid())); map.put("pid",String.valueOf(childlists.get(j).getPid())); map.put("num",String.valueOf(value)); map.put("selected",String.valueOf(childlists.get(j).getSelected())); Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map); observables[j]=(observable); Log.d("MainActivity", "map:" + map); } Observable.merge(observables) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1() { @Override public void call(Object o) { getDataFromNet(); } }); } private void changePriceAndNum() { int num=0; int sum=0; for (int i=0;i<data.size();i++){ List<CartBean.DataBean.ListBean> list= data.get(i).getList(); for (int j=0;j<list.size();j++){ if (list.get(j).getSelected()==1){ num+=list.get(j).getNum(); sum+=num*Double.valueOf(list.get(j).getBargainPrice()); } } } jiesuan.setText("去结算"+num); price.setText(""+sum); } private void changeStateByChild(Boolean b) { Observable[] observables=new Observable[childlists.size()]; for (int j=0;j<childlists.size();j++){ Map<String,String> map=new HashMap<>(); map.put("uid","2775"); map.put("sellerid",String.valueOf(childlists.get(j).getSellerid())); map.put("pid",String.valueOf(childlists.get(j).getPid())); map.put("num",String.valueOf(childlists.get(j).getNum())); map.put("selected",String.valueOf(b?1:0)); Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map); observables[j]=(observable); Log.d("MainActivity", "map:" + map); } Observable.merge(observables) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1() { @Override public void call(Object o) { getDataFromNet(); } }); } private void changeStateByGroup(List<CartBean.DataBean.ListBean> list, Boolean b) { Observable[] observables=new Observable[list.size()]; for (int j=0;j<list.size();j++){ Map<String,String> map=new HashMap<>(); map.put("uid","2775"); map.put("sellerid",String.valueOf(list.get(j).getSellerid())); map.put("pid",String.valueOf(list.get(j).getPid())); map.put("num",String.valueOf(list.get(j).getNum())); map.put("selected",String.valueOf(b?1:0)); Observable<String> observable = RetrofitHelper.getApiService(Api.BaseUrl).gengData(map); observables[j]=(observable); Log.d("MainActivity", "map:" + map); } Observable.merge(observables) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1() { @Override public void call(Object o) { getDataFromNet(); } }); } private boolean childIsAllCheck(List<CartBean.DataBean.ListBean> list) { for (int j=0;j<list.size();j++){ if (list.get(j).getSelected()==0) { return false; } } return true; } private boolean childIsChick() { for (int i=0;i<data.size();i++){ List<CartBean.DataBean.ListBean> list= data.get(i).getList(); for (int j=0;j<list.size();j++){ if (list.get(j).getSelected()==0) { return false; } } } return true; } }
public interface SerViceAPI { @FormUrlEncoded @POST("product/getCarts") Call<ResponseBody> getData(@Field("uid") String uid); @FormUrlEncoded @POST("product/updateCarts") Observable<String> gengData(@FieldMap Map<String,String> map); @FormUrlEncoded @POST("product/deleteCart") Observable<String> delData(@FieldMap Map<String,String> map); // }
public class Api { public static final String BaseUrl="http://120.27.23.105/"; }public class CartModel {
private CartPresentr cartPresentr;
public CartModel(CartPresentr cartPresentr) {
this.cartPresentr = cartPresentr;
}
public void setPath(String baseUrl, String uid) {
RetrofitHelper.getApiService(baseUrl).getCart(uid)
.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful() && response.body() != null) {
try {
String string= response.body().string();
CartBean cartBean = new Gson().fromJson(string, CartBean.class);
Log.d("CartModel", cartBean.getCode());
cartPresentr.success(cartBean);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
}