xml
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<CheckBox
android:id="@+id/shopcar_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="20dp" />
<android.support.v7.widget.CardView
android:layout_width="392dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="#eee"
app:cardCornerRadius="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="97dp"
android:background="#ffffff"
android:orientation="horizontal">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/shopcar_image"
android:layout_width="81dp"
android:layout_height="81dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="97dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/shopcar_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="name" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/shopcar_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="18dp"
android:text="¥520.00"
android:textColor="#ff0606"
android:textSize="14sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="18dp"
android:orientation="horizontal">
<Button
android:id="@+id/shopcar_goods_count_jianshao"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:background="#0000"
android:text="-"
android:textSize="18sp" />
<TextView
android:id="@+id/shopcar_goods_count"
android:layout_width="31dp"
android:layout_height="18dp"
android:background="#eee"
android:gravity="center"
android:text="1" />
<Button
android:id="@+id/shopcar_goods_count_add"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:background="#0000"
android:text="+"
android:textSize="18dp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Adapter
package com.example.weidu.view.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.weidu.R;
import com.example.weidu.model.bean.QueryShopCartBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;
import java.util.List;
public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartAdapter.MyViewHolder> {
private Context context;
private List<QueryShopCartBean.ResultBean> list = new ArrayList<>();
private CheckBox checkAll;
private TextView allPrice;
private int sum = 0;
private int sum2 = 0;
private CallOrder callOrder;
public void setCallOrder(CallOrder callOrder) {
this.callOrder = callOrder;
}
public ShopCartAdapter(Context context) {
this.context = context;
}
public void setData(List<QueryShopCartBean.ResultBean> list) {
if (list != null) {
this.list = list;
notifyDataSetChanged();
}
}
public List<QueryShopCartBean.ResultBean> getCount() {
return list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item_shopcart, null);
MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
if (list.get(i) != null) {
myViewHolder.check.setChecked(list.get(i).isCheck());
myViewHolder.image.setImageURI(list.get(i).getPic());
myViewHolder.name.setText(list.get(i).getCommodityName());
myViewHolder.price.setText("¥" + list.get(i).getPrice() + ".00");
myViewHolder.goods_count.setText("" + list.get(i).getCount());
myViewHolder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callOrder.onPosition(i);
}
});
myViewHolder.view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
callOrder.onLong(i);
return true;
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
public void setView(CheckBox shopcar_checkall, TextView shopcar_allprice) {
this.checkAll = shopcar_checkall;
this.allPrice = shopcar_allprice;
//全选点击事件
checkAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
if (checkBox.isChecked()) {
sum = 0;
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheck(checkBox.isChecked());
int price = list.get(i).getPrice();
int count = list.get(i).getCount();
sum += price * count;
}
allPrice.setText("合计:¥" + sum + ".00");
notifyDataSetChanged();
} else {
sum = 0;
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheck(checkBox.isChecked());
}
allPrice.setText("合计:¥" + sum + ".00");
notifyDataSetChanged();
}
}
});
}
public class MyViewHolder extends RecyclerView.ViewHolder {
CheckBox check;
SimpleDraweeView image;
TextView name;
TextView price;
Button count_jianshao;
TextView goods_count;
Button count_add;
View view;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
this.view = itemView;
check = itemView.findViewById(R.id.shopcar_check);
image = itemView.findViewById(R.id.shopcar_image);
name = itemView.findViewById(R.id.shopcar_name);
price = itemView.findViewById(R.id.shopcar_price);
count_jianshao = itemView.findViewById(R.id.shopcar_goods_count_jianshao);
goods_count = itemView.findViewById(R.id.shopcar_goods_count);
count_add = itemView.findViewById(R.id.shopcar_goods_count_add);
//商品数量减少
count_jianshao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (list.get(getAdapterPosition()).isCheck()) {//当前item处于选中状态
int count = list.get(getAdapterPosition()).getCount();
if (count > 1) {
list.get(getAdapterPosition()).setCount(count - 1);
goods_count.setText("" + list.get(getAdapterPosition()).getCount());
Integer integer = Integer.valueOf(goods_count.getText().toString());
sum = list.get(getAdapterPosition()).getPrice() * integer;
allPrice.setText("合计:¥" + sum + ".00");
//在全选状态下减少数量价格随动
if (checkAll.isChecked()) {
sum2 = 0;
for (int i = 0; i < list.size(); i++) {
int price = list.get(i).getPrice();
int count2 = list.get(i).getCount();
sum2 += price * count2;
}
sum2 -= list.get(getAdapterPosition()).getPrice() - list.get(getAdapterPosition()).getPrice();
allPrice.setText("合计:¥" + sum2 + ".00");
}
notifyDataSetChanged();
}
} else {//当前item不处于选中状态
int count = list.get(getAdapterPosition()).getCount();
if (count > 1) {
list.get(getAdapterPosition()).setCount(count - 1);
goods_count.setText("" + list.get(getAdapterPosition()).getCount());
notifyDataSetChanged();
}
}
}
});
//商品数量增加
count_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (list.get(getAdapterPosition()).isCheck()) {//当前item处于选中状态
int count = list.get(getAdapterPosition()).getCount();
list.get(getAdapterPosition()).setCount(count + 1);
goods_count.setText("" + list.get(getAdapterPosition()).getCount());
Integer integer = Integer.valueOf(goods_count.getText().toString());
sum = list.get(getAdapterPosition()).getPrice() * integer;
allPrice.setText("合计:¥" + sum + ".00");
//在全选状态下减少数量价格随动
if (checkAll.isChecked()) {
sum2 = 0;
for (int i = 0; i < list.size(); i++) {
int price = list.get(i).getPrice();
int count2 = list.get(i).getCount();
sum2 += price * count2;
}
sum2 += list.get(getAdapterPosition()).getPrice() - list.get(getAdapterPosition()).getPrice();
allPrice.setText("合计:¥" + sum2 + ".00");
}
notifyDataSetChanged();
} else {//当前item不处于选中状态
int count = list.get(getAdapterPosition()).getCount();
list.get(getAdapterPosition()).setCount(count + 1);
goods_count.setText("" + list.get(getAdapterPosition()).getCount());
}
}
});
//条目checkbox点击事件
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(getAdapterPosition()).setCheck(check.isChecked());
//判断是否全部选中
boolean isCheckAll = isCheckAll();
checkAll.setChecked(isCheckAll);
//计算总价
isAllPrice(getAdapterPosition());
notifyDataSetChanged();
}
});
}
}
private void isAllPrice(int adapterPosition) {
boolean check = list.get(adapterPosition).isCheck();
if (check) {
sum += list.get(adapterPosition).getPrice() * list.get(adapterPosition).getCount();
allPrice.setText("合计:¥" + sum + ".00");
} else {
sum -= list.get(adapterPosition).getPrice() * list.get(adapterPosition).getCount();
allPrice.setText("合计:¥" + sum + ".00");
}
}
public interface CallOrder {
void onPosition(int s);
void onLong(int o);
}
private boolean isCheckAll() {
for (int i = 0; i < list.size(); i++) {
boolean check = list.get(i).isCheck();
if (!check) {
return false;
}
}
return true;
}
}