activity
package com.bw.cartwo.fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bw.cartwo.R;
import com.bw.cartwo.adapter.CarAdapterOne;
import com.bw.cartwo.api.Api;
import com.bw.cartwo.base.BaseFragment;
import com.bw.cartwo.bean.Carinfo;
import com.bw.cartwo.bean.Shoopinginfo;
import com.bw.cartwo.content.ListContent;
import com.bw.cartwo.presenter.ListPresenter;
import java.util.List;
import butterknife.BindView;
import io.reactivex.disposables.CompositeDisposable;
public class ShoppingFragment extends BaseFragment implements ListContent.ListView, View.OnClickListener {
@BindView(R.id.c_recycle)
RecyclerView cRecycle;
@BindView(R.id.c_check)
CheckBox cCheck;
@BindView(R.id.c_price)
TextView cPrice;
private CompositeDisposable disposable = new CompositeDisposable();
private ListPresenter listPresenter;
private CarAdapterOne carAdapterOne;
private List<Carinfo.DataBean> list;
@Override
protected int onLayoutId() {
return R.layout.fragment_shopping;
}
@Override
protected void onView(View view) {
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
cRecycle.setLayoutManager(manager);
listPresenter = new ListPresenter();
listPresenter.attachView(this);
cCheck.setOnClickListener(this);
}
@Override
protected void onData() {
listPresenter.getCarData(Api.Carurl, 51, disposable);
}
@Override
public void getListData(List<Shoopinginfo.ResultBean> result) {
}
@Override
public void getCarData(List<Carinfo.DataBean> data) {
this.list = data;
carAdapterOne = new CarAdapterOne(getActivity(), list);
cRecycle.setAdapter(carAdapterOne);
//价格和状态
carAdapterOne.setOnPriceOne(new CarAdapterOne.OnPriceOne() {
@Override
public void isPrice(boolean check, int price) {
//状态
cCheck.setChecked(check);
//价格
cPrice.setText(price + "");
//刷新适配器
carAdapterOne.notifyDataSetChanged();
}
});
//加减器
carAdapterOne.setOnCheckOne(new CarAdapterOne.OnCheckOne() {
@Override
public void isCheck(int prices) {
//价格
cPrice.setText(prices + "");
//刷新适配器
carAdapterOne.notifyDataSetChanged();
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.c_check:
setmCheckBar(cCheck.isChecked());
break;
}
}
//设置状态
private void setmCheckBar(boolean checked) {
int prices = 0;
if (checked) {
//设置一级的状态
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheckOne(true);
//设置二级
for (int j = 0; j < list.get(i).getList().size(); j++) {
//设置二级状态
list.get(i).getList().get(j).setCheckTwo(true);
//设置价格
prices += list.get(i).getList().get(j).getNum() * list.get(i).getList().get(j).getPrice();
}
}
//赋值价格
cPrice.setText(prices + "");
} else {
//设置一级的状态
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheckOne(false);
//设置二级
for (int j = 0; j < list.get(i).getList().size(); j++) {
//设置二级状态
list.get(i).getList().get(j).setCheckTwo(false);
}
}
//赋值价格
prices = 0;
cPrice.setText(prices + "");
}
carAdapterOne.notifyDataSetChanged();
}
@Override
public void onDestroy() {
super.onDestroy();
listPresenter.detachView(this);
boolean disposed = disposable.isDisposed();
if (!disposed) {
disposable.clear();
disposable.dispose();
}
}
}
oneAdapter
package com.bw.cartwo.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.CompoundButton;
import android.widget.TextView;
import com.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;
import java.util.List;
public class CarAdapterOne extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<Carinfo.DataBean> data;
public CarAdapterOne(Context context, List<Carinfo.DataBean> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.item_carone, null);
CarHolder carHolder = new CarHolder(view);
return carHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
final CarHolder carHolder = (CarHolder) viewHolder;
//加上这个不让会错
carHolder.caro_chenck.setOnCheckedChangeListener(null);
carHolder.caro_title.setText(data.get(i).getSellerName());
LinearLayoutManager manager = new LinearLayoutManager(context);
carHolder.caro_recycle.setLayoutManager(manager);
carHolder.caro_chenck.setChecked(data.get(i).isCheckOne());
List<Carinfo.DataBean.ListBean> list = data.get(i).getList();
CarAdapterTwo carAdapterTwo = new CarAdapterTwo(context, list);
carHolder.caro_recycle.setAdapter(carAdapterTwo);
//一级复选框改变 监听改变
carHolder.caro_chenck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//设置状态
data.get(i).setCheckOne(isChecked);
//价格
int prices = 0;
//控制全选的变量
int num = 0;
//联动商品复选框
for (int j = 0; j < data.size(); j++) {
//商家的状态
if (data.get(j).isCheckOne()) {
//设置商品
for (int s = 0; s < data.get(j).getList().size(); s++) {
//设置状态为
data.get(j).getList().get(s).setCheckTwo(true);
//价格
prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
}
//控制全选的变量++
num++;
} else {
//设置商品
for (int s = 0; s < data.get(j).getList().size(); s++) {
//设置状态为
data.get(j).getList().get(s).setCheckTwo(false);
}
}
}
//判断全选变量是否与当前集合长度是否相等
if (num == data.size()) {
if (onPriceOne != null) {
onPriceOne.isPrice(true, prices);
}
} else {
if (onPriceOne != null) {
onPriceOne.isPrice(false, prices);
}
}
}
});
//二级购物车复选框监听
carAdapterTwo.setOnClickTwo(new CarAdapterTwo.OnClickTwo() {
@Override
public void isCheck() {
//总价
int prices = 0;
//控制全选的变量
int num = 0;
//控制一级复选框状态变量
int fist = 0;
for (int j = 0; j < data.size(); j++) {
for (int s = 0; s < data.get(j).getList().size(); s++) {
//二级复选宽选中
if (data.get(j).getList().get(s).isCheckTwo()) {
//价格
prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
//控制一级复选框状态变量
fist++;
}
}
//在第一个循环判断
if (fist == data.get(j).getList().size()) {
//设置二级复选框
data.get(j).setCheckOne(true);
//数量++
num++;
} else {
data.get(j).setCheckOne(false);
}
//初始化
fist = 0;
}
//判断全选变量是否与当前集合长度是否相等
if (num == data.size()) {
if (onPriceOne != null) {
onPriceOne.isPrice(true, prices);
}
} else {
if (onPriceOne != null) {
onPriceOne.isPrice(false, prices);
}
}
}
});
//加减器
carAdapterTwo.setOnPriceTwo(new CarAdapterTwo.OnPriceTwo() {
@Override
public void isPrice() {
int prices = 0;
//设置一级的状态
for (int j = 0; j < data.size(); j++) {
//判断一级状态
if (data.get(j).isCheckOne()) {
for (int s = 0; s < data.get(j).getList().size(); s++) {
//判断二级状态
if (data.get(j).getList().get(s).isCheckTwo()) {
prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
}
}
} else {
for (int s = 0; s < data.get(j).getList().size(); s++) {
//判断二级状态
if (data.get(j).getList().get(s).isCheckTwo()) {
prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
}
}
}
}
if (onCheckOne != null) {
onCheckOne.isCheck(prices);
}
}
});
}
@Override
public int getItemCount() {
return data.size();
}
private class CarHolder extends RecyclerView.ViewHolder {
private TextView caro_title;
private final CheckBox caro_chenck;
private final RecyclerView caro_recycle;
public CarHolder(@NonNull View itemView) {
super(itemView);
caro_title = itemView.findViewById(R.id.caro_title);
caro_chenck = itemView.findViewById(R.id.caro_chenck);
caro_recycle = itemView.findViewById(R.id.caro_recycle);
}
}
//加减器
public interface OnCheckOne {
void isCheck(int prices);
}
public OnCheckOne onCheckOne;
public void setOnCheckOne(OnCheckOne onCheckOne) {
this.onCheckOne = onCheckOne;
}
//全选框的状态和价格回调
public interface OnPriceOne {
void isPrice(boolean check, int price);
}
public OnPriceOne onPriceOne;
public void setOnPriceOne(OnPriceOne onPriceOne) {
this.onPriceOne = onPriceOne;
}
}
twoAdapter
package com.bw.cartwo.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.CompoundButton;
import android.widget.TextView;
import com.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;
import com.bw.cartwo.view.NumberLayout;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class CarAdapterTwo extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<Carinfo.DataBean.ListBean> list;
public CarAdapterTwo(Context context, List<Carinfo.DataBean.ListBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.item_cartwo, null);
CarHolderTwo carHolderTwo = new CarHolderTwo(view);
return carHolderTwo;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
final CarHolderTwo carHolderTwo = (CarHolderTwo) viewHolder;
carHolderTwo.cart_image.setImageURI(list.get(i).getDetailUrl());
carHolderTwo.cart_title.setText(list.get(i).getTitle());
carHolderTwo.cart_price.setText(list.get(i).getBargainPrice() + "");
carHolderTwo.cart_chenck.setChecked(list.get(i).isCheckTwo());
//设置商品复选框
carHolderTwo.cart_chenck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//赋值
list.get(i).setCheckTwo(isChecked);
//回调
if (onClickTwo != null) {
onClickTwo.isCheck();
}
}
});
//加减器
carHolderTwo.numberLayout.getData(list, i, list.get(i).getNum());
carHolderTwo.numberLayout.setOnNumberClick(new NumberLayout.OnNumberClick() {
@Override
public void isNum() {
//会调
if (onPriceTwo != null) {
onPriceTwo.isPrice();
notifyDataSetChanged();
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
private class CarHolderTwo extends RecyclerView.ViewHolder {
private TextView cart_title, cart_price;
private final SimpleDraweeView cart_image;
private final CheckBox cart_chenck;
private final NumberLayout numberLayout;
public CarHolderTwo(@NonNull View itemView) {
super(itemView);
cart_image = itemView.findViewById(R.id.cart_image);
cart_title = itemView.findViewById(R.id.cart_title);
cart_price = itemView.findViewById(R.id.cart_price);
cart_chenck = itemView.findViewById(R.id.cart_chenck);
numberLayout = itemView.findViewById(R.id.cart_number);
}
}
//复选框
public interface OnClickTwo {
void isCheck();
}
public OnClickTwo onClickTwo;
public void setOnClickTwo(OnClickTwo onClickTwo) {
this.onClickTwo = onClickTwo;
}
//加减器
public interface OnPriceTwo {
void isPrice();
}
public OnPriceTwo onPriceTwo;
public void setOnPriceTwo(OnPriceTwo onPriceTwo) {
this.onPriceTwo = onPriceTwo;
}
}
//加减
package com.bw.cartwo.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;
import java.util.List;
public class NumberLayout extends LinearLayout implements View.OnClickListener {
private TextView number;
private List<Carinfo.DataBean.ListBean> list;
private int i;
public void getData(List<Carinfo.DataBean.ListBean> list, int i, int num) {
this.list = list;
this.i = i;
this.number.setText(num + "");
}
public NumberLayout(Context context) {
super(context);
}
public NumberLayout(Context context, AttributeSet attrs) {
super(context, attrs);
View view = LayoutInflater.from(context).inflate(R.layout.item_number, this);
TextView jia = findViewById(R.id.n_jia);
number = findViewById(R.id.n_number);
TextView jian = findViewById(R.id.n_jian);
jia.setOnClickListener(this);
jian.setOnClickListener(this);
}
public NumberLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.n_jia:
String trim = number.getText().toString().trim();
int n = Integer.valueOf(trim);
n++;
list.get(i).setNum(n);
if (onNumberClick != null) {
onNumberClick.isNum();
}
break;
case R.id.n_jian:
String trims = number.getText().toString().trim();
int m = Integer.valueOf(trims);
if (m == 1) {
return;
}
m--;
list.get(i).setNum(m);
if (onNumberClick != null) {
onNumberClick.isNum();
}
break;
}
}
public interface OnNumberClick {
void isNum();
}
public OnNumberClick onNumberClick;
public void setOnNumberClick(OnNumberClick onNumberClick) {
this.onNumberClick = onNumberClick;
}
}