实现效果如图:
1.通过mvp展示数据接口回调在activity中的逻辑
@Override
public void Success(ShoppingBean shoppingBean) {
data = shoppingBean.getData();
data.remove(0);
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(manager);
shoppingAdapter = new ShoppingAdapter(R.layout.shopping_item, data);
recyclerView.setAdapter(shoppingAdapter);
checkBox_all.setOnCheckedChangeListener(null);
checkBox_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < data.size(); i++) {
data.get(i).setOnshoppingChecked(checkBox_all.isChecked());
for (int j = 0; j < data.get(i).getList().size(); j++) {
data.get(i).getList().get(j).setGoodsChecked(checkBox_all.isChecked());
}
}
totalPrice();
shoppingAdapter.notifyDataSetChanged();
}
});
shoppingAdapter.setOnGoodsItemClickListener(new ShoppingAdapter.OnShopItemClickListener() {
@Override
public void onCallBack() {
boolean result = true;
for (int i = 0; i < data.size(); i++) {
result = result & data.get(i).isOnshoppingChecked();
for (int j = 0; j < data.get(i).getList().size(); j++) {
result = result & data.get(i).getList().get(j).isGoodsChecked();
}
}
checkBox_all.setChecked(result);
totalPrice();
}
});
}
private void totalPrice() {
double countPtice = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data.get(i).getList().size(); j++) {
if (data.get(i).getList().get(j).isGoodsChecked() == true) {
int number = data.get(i).getList().get(j).getDefalutNumber();
double price = data.get(i).getList().get(j).getPrice();
double count = number * price;
countPtice = countPtice + count;
}
}
}
price.setText("¥:" + countPtice);
}
2.在商家适配器中的相关逻辑
public class ShoppingAdapter extends BaseQuickAdapter<ShoppingBean.DataBean,BaseViewHolder> {
private RecyclerView recyclerViews;
private OnShopItemClickListener mshopItemClickListener;
public interface OnShopItemClickListener{
void onCallBack();
}
public void setOnGoodsItemClickListener(OnShopItemClickListener onShopItemClickListener){
this.mshopItemClickListener = onShopItemClickListener;
}
public ShoppingAdapter(int layoutResId, @Nullable List<ShoppingBean.DataBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final ShoppingBean.DataBean item) {
helper.setText(R.id.textView,item.getSellerName());
final CheckBox checkBox_shop = helper.getView(R.id.checkbox_shopping);
recyclerViews = helper.getView(R.id.recyclerViews);
LinearLayoutManager manager = new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false);
recyclerViews.setLayoutManager(manager);
final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.goods_item,item.getList());
recyclerViews.setAdapter(goodsAdapter);
checkBox_shop.setOnCheckedChangeListener(null);
checkBox_shop.setChecked(item.isOnshoppingChecked());
goodsAdapter.setOnGoodsItemClickListener(new GoodsAdapter.OnGoodsItemClickListener() {
@Override
public void onCallBack() {
boolean result = true;
for (int i = 0; i < item.getList().size(); i++) {
result = result & item.getList().get(i).isGoodsChecked();
}
checkBox_shop.setChecked(result);
goodsAdapter.notifyDataSetChanged();
mshopItemClickListener.onCallBack();
}
});
checkBox_shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < item.getList().size(); i++) {
item.getList().get(i).setGoodsChecked(checkBox_shop.isChecked());
}
item.setOnshoppingChecked(checkBox_shop.isChecked());
notifyDataSetChanged();
mshopItemClickListener.onCallBack();
}
});
}
}
3.在商品子条目中的一系列逻辑
public class GoodsAdapter extends BaseQuickAdapter<ShoppingBean.DataBean.ListBean,BaseViewHolder> {
private OnGoodsItemClickListener monGoodsItemClickListener;
public interface OnGoodsItemClickListener{
void onCallBack();
}
public void setOnGoodsItemClickListener(OnGoodsItemClickListener onGoodsItemClickListener){
this.monGoodsItemClickListener = onGoodsItemClickListener;
}
public GoodsAdapter(int layoutResId, @Nullable List<ShoppingBean.DataBean.ListBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final ShoppingBean.DataBean.ListBean item) {
helper.setText(R.id.textView_name,item.getTitle());
helper.setText(R.id.textView_price,item.getPrice()+"");
ImageView iv_goodsIcon = helper.getView(R.id.imageView);
String imagesString = item.getImages();
String[] imagesStr = imagesString.split("\\|");
Glide.with(mContext).load(imagesStr[0]).into(iv_goodsIcon);
final CheckBox checkBox_goods = helper.getView(R.id.checkbox_goods);
checkBox_goods.setOnCheckedChangeListener(null);
checkBox_goods.setChecked(item.isGoodsChecked());
checkBox_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.setGoodsChecked(isChecked);
monGoodsItemClickListener.onCallBack();
}
});
//加减
Calcultor calculator = helper.getView(R.id.calcultor);
calculator.setOnGouNumber(new Calcultor.OnGouNumber() {
@Override
public void jian(int number) {
item.setDefalutNumber(number);
monGoodsItemClickListener.onCallBack();
}
@Override
public void jia(int number) {
item.setDefalutNumber(number);
monGoodsItemClickListener.onCallBack();
}
});
}
}
4.自定义View的加减器
public class Calcultor extends LinearLayout {
private int intnum=1;
public Calcultor(Context context) {
this(context,null);
}
public Calcultor(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public Calcultor(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
View inflate = LayoutInflater.from(context).inflate(R.layout.calcultor, this);
Button jia = inflate.findViewById(R.id.jia);
Button jian = inflate.findViewById(R.id.jian);
final EditText num = inflate.findViewById(R.id.num);
//intnum = 1;
jian.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intnum = intnum-1;
if (intnum<0){
intnum=0;
num.setText(String.valueOf(intnum));
}
num.setText(String.valueOf(intnum));
onGouNumber.jian(intnum);
}
});
jia.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intnum = intnum+1;
num.setText(String.valueOf(intnum));
onGouNumber.jia(intnum);
}
});
}
private OnGouNumber onGouNumber;
public void setOnGouNumber(OnGouNumber onGouNumber) {
this.onGouNumber = onGouNumber;
}
public interface OnGouNumber{
public void jian(int number);
public void jia(int number);
}
}