<?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="wrap_content"
tools:context="com.example.cartdamo.CartActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:layout_above="@+id/cart_bottom_layout"
android:layout_alignParentTop="true"
android:layout_height="wrap_content"
android:id="@+id/caetRv">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:padding="5dp"
android:id="@+id/cart_bottom_layout"
android:background="#a2fdfa">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/allCheckbox"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalPriceTV"
android:layout_centerVertical="true"
android:text="总价"
android:layout_toRightOf="@+id/allCheckbox"
/>
<Button
android:id="@+id/buy"
android:layout_alignParentRight="true"
android:text="去结算"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
</RelativeLayout>
**********************
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/sellerCheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/sellerNameTv"
android:text="商家"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#999999"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/productXRV"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
</LinearLayout>
*****************************//********
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:padding="10dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<CheckBox
android:id="@+id/productCheckBox"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/product_icon"
android:src="@mipmap/ic_launcher"
android:layout_width="80dp"
android:layout_height="80dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
>
<TextView
android:id="@+id/title"
android:text="商品标题"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/price"
android:layout_alignParentLeft="true"
android:text="优惠价:99.99"
android:textColor="#ff0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.example.cartdamo.widget.MyJaJian
android:id="@+id/jiajianqi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"></com.example.cartdamo.widget.MyJaJian>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
<View
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#999999"/>
</LinearLayout>
********************************************
**********************************************************
加减器
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff"/>
<size android:width="100dp" android:height="30dp"/>
<stroke android:width="1dp" android:color="#999999"/>
</shape>
*************************************************
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="@drawable/jia_jian"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:textSize="25sp"
android:padding="5dp"
android:id="@+id/jian"/>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#999999" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:gravity="center"
android:layout_weight="1"
android:background="#00000000"
android:id="@+id/num"/>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#999999"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:padding="5dp"
android:textSize="25sp"
android:id="@+id/jia"/>
</LinearLayout>
***************************************************
package com.example.cartdamo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.example.cartdamo.adapter.CartAdapter;
import com.example.cartdamo.adapter.CartAllCheckboxlistener;
import com.example.cartdamo.adapter.CheckListener;
import com.example.cartdamo.bean.CartBean;
import com.example.cartdamo.presenter.CartPresenter;
import com.example.cartdamo.view.IcartView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class CartActivity extends AppCompatActivity implements IcartView,CartAllCheckboxlistener {
private List<CartBean.DataBean> list;
private XRecyclerView xrecyclerView;
private CartPresenter cartPresenter;
private CartAdapter cartAdapter;
private CheckBox allcheckBox;
private TextView totalPricetv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
initView();
initData();
}
private void initView() {
list=new ArrayList<>();
allcheckBox=findViewById(R.id.allCheckbox);
xrecyclerView=findViewById(R.id.caetRv);
xrecyclerView.setLayoutManager(new LinearLayoutManager(this));
totalPricetv=findViewById(R.id.totalPriceTV);
xrecyclerView.setLoadingMoreEnabled(true);//支持加载更多
xrecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
}
@Override
public void onLoadMore() {
initData();
}
});
allcheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(allcheckBox.isChecked()){
if (list!=null&&list.size()>0){
for (int i = 0; i < list.size(); i++) {
list.get(i).setSelected(true);
for (int i1 = 0; i1 < list.get(i).getList().size(); i1++) {
list.get(i).getList().get(i1).setSelected(true);
}
}
}
}else {
if (list!=null&&list.size()>0){
for (int i = 0; i < list.size(); i++) {
list.get(i).setSelected(false);
for (int i1 = 0; i1 < list.get(i).getList().size(); i1++) {
list.get(i).getList().get(i1).setSelected(false);
}
}
}
// totalPrice=0;
}
cartAdapter.notifyDataSetChanged();
totalPrice();
}
});
}
private void initData() {
HashMap<String,String>params=new HashMap<>();
params.put("uid","71");
cartPresenter = new CartPresenter(this);
cartPresenter.getCart(params,Api.GETCARTS);
}
@Override
public void success(CartBean cartBean) {
if (cartBean!=null&&cartBean.getData()!=null) {
list = cartBean.getData();
cartAdapter = new CartAdapter(this, list);
xrecyclerView.setAdapter(cartAdapter);
cartAdapter.setAllCheckboxlistener(this);
}
}
@Override
public void failure(String msg) {
}
@Override
public void notifyAllCheckboxStatus() {
StringBuilder stringBuilder = new StringBuilder();
if (cartAdapter!=null){
for (int i = 0; i < cartAdapter.getCartList().size(); i++) {
stringBuilder.append(cartAdapter.getCartList().get(i).isSelected());
for (int i1 = 0; i1 < cartAdapter.getCartList().get(i).getList().size(); i1++) {
stringBuilder.append(cartAdapter.getCartList().get(i).getList().get(i1).isSelected());
}
}
}
if (stringBuilder.toString().contains("false")){
allcheckBox.setChecked(false);
// totlPrice=0;
}else {
allcheckBox.setChecked(true);
}
totalPrice();//计算总价
}
private void totalPrice() {
double totalPrice=0;
for (int i = 0; i < cartAdapter.getCartList().size(); i++) {
for (int i1 = 0; i1 < cartAdapter.getCartList().get(i).getList().size(); i1++) {
if (cartAdapter.getCartList().get(i).getList().get(i1).isSelected()){
CartBean.DataBean.ListBean listBean = cartAdapter.getCartList().get(i).getList().get(i1);
totalPrice+=listBean.getBargainPrice()*listBean.getTotaLnum();
}
}
}
totalPricetv.setText("总价"+totalPrice);
}
}
*********************** * * * ************************************
package com.example.cartdamo.view;
import com.example.cartdamo.bean.CartBean;
/**
* Created by lenovo on 2018/8/22.
*/
public interface IcartView {
void success(CartBean cartBean);
void failure(String msg);
}
********************************************
package com.example.cartdamo.model;
import android.os.Handler;
import android.text.TextUtils;
import com.example.cartdamo.bean.CartBean;
import com.example.cartdamo.utils.OkhttpUtils;
import com.example.cartdamo.utils.RequestCallBack;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import okhttp3.Call;
import okhttp3.Response;
/**
* Created by lenovo on 2018/8/22.
*/
public class CartModel {
private Handler handler=new Handler();
public void getCart(HashMap<String,String>prams, String url, final CartCallBack cartCallBack){
OkhttpUtils.getInstace().postData(url, prams, new RequestCallBack() {
@Override
public void failure(Call call, IOException e) {
cartCallBack.fail("有错");
}
@Override
public void onResponse(Call call, Response response) {
try {
String jsonResult=response.body().string();
if (!TextUtils.isEmpty(jsonResult)){
jiexi(jsonResult,cartCallBack);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private void jiexi(String jsonResult, final CartCallBack cartCallBack) {
final CartBean cartBean = new Gson().fromJson(jsonResult, CartBean.class);
handler.post(new Runnable() {
@Override
public void run() {
cartCallBack.success(cartBean);
}
});
}
public interface CartCallBack {
void success(CartBean cartBean);
void fail(String msg);
}
}
**********************************************
package com.example.cartdamo.presenter;
import com.example.cartdamo.model.CartModel;
import com.example.cartdamo.bean.CartBean;
import com.example.cartdamo.view.IcartView;
import java.util.HashMap;
/**
* Created by lenovo on 2018/8/22.
*/
public class CartPresenter {
private IcartView icartView;
private CartModel cartModel;
public CartPresenter(IcartView icartView) {
this.icartView = icartView;
cartModel=new CartModel();
}
public void getCart(HashMap<String,String>params,String url){
cartModel.getCart(params, url, new CartModel.CartCallBack() {
@Override
public void success(CartBean cartBean) {
icartView.success(cartBean);
}
@Override
public void fail(String msg) {
icartView.failure(msg);
}
});
}
}
*****************************************************
package com.example.cartdamo;
public class Api {
public static final String GETCARTS = "http://www.zhaoapi.cn/product/getCarts";//获取购物车
}
************************************************************************
package com.example.cartdamo.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
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.CheckBox;
import android.widget.TextView;
import com.example.cartdamo.R;
import com.example.cartdamo.bean.CartBean;
import java.util.List;
/**
* Created by lenovo on 2018/8/23.
*/
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.CartViewHolder>implements CheckListener {
private CheckListener checkListener;
private Context context;
private List<CartBean.DataBean> cartList;
private CartAllCheckboxlistener allCheckboxlistener;
public CartAdapter(Context context, List<CartBean.DataBean> cartList) {
this.context = context;
this.cartList = cartList;
}
public void addPageData(List<CartBean.DataBean>list){
if (cartList!=null){
cartList.addAll(list);
notifyDataSetChanged();
}
}
public void setAllCheckboxlistener(CartAllCheckboxlistener allCheckboxlistener) {
this.allCheckboxlistener = allCheckboxlistener;
}
@NonNull
@Override
public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.cart_item_layout, parent, false);
CartViewHolder viewHolder = new CartViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final CartViewHolder holder, int position) {
final CartBean.DataBean bean = cartList.get(position);
holder.checkBox.setChecked(bean.isSelected());
holder.nameTv.setText(bean.getSellerName());
holder.proudXRV.setLayoutManager(new LinearLayoutManager(context));
ProductAdapter productAdapter = new ProductAdapter(context, bean.getList());
holder.proudXRV.setAdapter(productAdapter);
productAdapter.setCheckListener(this);
//
for (int i = 0; i < bean.getList().size(); i++) {
if (!bean.getList().get(i).isSelected()){
holder.checkBox.setChecked(false);
break;
}else {
holder.checkBox.setChecked(true);
}
}
//设置商家的勾选点击事件
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.checkBox.isChecked()){
bean.setSelected(true);
for (int i = 0; i < bean.getList().size(); i++) {
bean.getList().get(i).setSelected(true);
}
}else {
bean.setSelected(false);
for (int i = 0; i < bean.getList().size(); i++) {
bean.getList().get(i).setSelected(false);
}
}
notifyDataSetChanged();
if (allCheckboxlistener!=null){
allCheckboxlistener.notifyAllCheckboxStatus();
}
}
});
}
public List<CartBean.DataBean> getCartList() {
return cartList;
}
@Override
public int getItemCount() {
return cartList.size()==0?0:cartList.size();
}
@Override
public void notifyParent() {
notifyDataSetChanged();
if (allCheckboxlistener!=null);
allCheckboxlistener.notifyAllCheckboxStatus();
}
public class CartViewHolder extends RecyclerView.ViewHolder {
private CheckBox checkBox;
private TextView nameTv;
private RecyclerView proudXRV;
public CartViewHolder(View itemView) {
super(itemView);
checkBox=itemView.findViewById(R.id.sellerCheckbox);
nameTv=itemView.findViewById(R.id.sellerNameTv);
proudXRV=itemView.findViewById(R.id.productXRV);
}
}
}
****************************************
package com.example.cartdamo.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.cartdamo.R;
import com.example.cartdamo.bean.CartBean;
import com.example.cartdamo.widget.MyJaJian;
import java.util.List;
/**
* Created by lenovo on 2018/8/23.
*/
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.CartViewHolder>{
private Context context;
private List<CartBean.DataBean.ListBean> listBeanList;
private CartAllCheckboxlistener cartAllCheckboxlistener;
private CheckListener checkListener;
//暴露给调用者
public void setCheckListener(CheckListener checkListener) {
this.checkListener = checkListener;
}
public ProductAdapter(Context context, List<CartBean.DataBean.ListBean> listBeanList) {
this.context = context;
this.listBeanList = listBeanList;
}
public void setCartAllCheckboxlistener(CartAllCheckboxlistener cartAllCheckboxlistener) {
this.cartAllCheckboxlistener = cartAllCheckboxlistener;
}
@NonNull
@Override
public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.product_item_layout, parent, false);
CartViewHolder viewHolder = new CartViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final CartViewHolder holder, int position) {
final CartBean.DataBean.ListBean bean = listBeanList.get(position);
holder.pricrTv.setText("优惠价:¥"+bean.getBargainPrice());
holder.titleTv.setText(bean.getTitle());
String[] imgs=bean.getImages().split("\\|");
if (imgs!=null&&imgs.length>0) {
Glide.with(context).load(imgs[0]).into(holder.proudIv);
}
holder.checkBox.setChecked(bean.isSelected());
holder.myJaJian.setNumEd(bean.getTotaLnum());
holder.myJaJian.setJiajianListener(new MyJaJian.jiajianListener() {
@Override
public void getNum(int numl) {
bean.setTotaLnum(numl);
if (checkListener!=null){
checkListener.notifyParent();
}
}
});
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.checkBox.isChecked()){
bean.setSelected(true);
}else {
bean.setSelected(false);
}
if (checkListener!=null){
checkListener.notifyParent();//通知一级列表
}
}
});
}
@Override
public int getItemCount() {
return listBeanList.size()==0?0:listBeanList.size();
}
public class CartViewHolder extends RecyclerView.ViewHolder {
private CheckBox checkBox;
private TextView titleTv,pricrTv;
private ImageView proudIv;
private MyJaJian myJaJian;
public CartViewHolder(View itemView) {
super(itemView);
checkBox=itemView.findViewById(R.id.productCheckBox);
titleTv=itemView.findViewById(R.id.title);
pricrTv=itemView.findViewById(R.id.price);
proudIv=itemView.findViewById(R.id.product_icon);
myJaJian=itemView.findViewById(R.id.jiajianqi);
}
}
}
**************************************************
package com.example.cartdamo.adapter;
/**
* Created by lenovo on 2018/8/23.
*/
public interface CheckListener {
void notifyParent();
}
package com.example.cartdamo.adapter;
/**
* Created by lenovo on 2018/8/23.
*/
public interface CartAllCheckboxlistener {
void notifyAllCheckboxStatus();
}
******************************************************
package com.example.cartdamo.widget;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.cartdamo.R;
/**
* Created by lenovo on 2018/8/23.
*/
public class MyJaJian extends LinearLayout{
private TextView jiaTV,jianTV;
private EditText numEt;
private int numl=1;
public MyJaJian(Context context) {
this(context,null);
}
public MyJaJian(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public MyJaJian(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
View view= LayoutInflater.from(context).inflate(R.layout.jia_jian_layout,this,false);
addView(view);
jiaTV=findViewById(R.id.jia);
jianTV=findViewById(R.id.jian);
numEt=findViewById(R.id.num);
numEt.setText(numl+"");
jiaTV.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
numl++;
numEt.setText(numl+"");
if (jiajianListener!=null){
jiajianListener.getNum(numl);
}
}
});
jianTV.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
numl--;
if (numl<=0){
Toast.makeText(getContext(),"穷鬼" , Toast.LENGTH_SHORT).show();
numl=1;
}
numEt.setText(numl+"");
if (jiajianListener!=null){
jiajianListener.getNum(numl);
}
}
});
}
public void setNumEd(int n) {
numEt.setText(n+"");
numl=Integer.parseInt(numEt.getText().toString());
}
private jiajianListener jiajianListener;
public void setJiajianListener(MyJaJian.jiajianListener jiajianListener) {
this.jiajianListener = jiajianListener;
}
public interface jiajianListener{
void getNum(int numl);
}
}
***************************************************
bean类
int改double
private double price;
private double bargainPrice;
public static class DataBean {
private boolean isSelected=false;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
public static class ListBean {
private boolean isSelected=false;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
private int totaLnum=1;
public int getTotaLnum() {
return totaLnum;
}
public void setTotaLnum(int totaLnum) {
this.totaLnum = totaLnum;
}