Activty里面
public class Fragmentthree extends Fragment implements Fragment3_viewinten {
private RecyclerView fragment3_recyclerView;
private CheckBox fragment3_checkBox;
private Button fragment3_jieshua;
private TextView fragment3_zongjia;
private TextView fragment3_zongjianshu;
private boolean c;
private List<Gouwuche.DataBean> list;
private Fragment3_adapter adapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment3, container, false);
fragment3_recyclerView = view.findViewById(R.id.fragment3_RecyclerView);
fragment3_checkBox = view.findViewById(R.id.fragment3_CheckBox);
fragment3_jieshua = view.findViewById(R.id.fragment3_jieshua);
fragment3_zongjia = view.findViewById(R.id.fragment3_zongjia);
fragment3_zongjianshu = view.findViewById(R.id.fragment3_zongjianshu);
Fragment3_precenter fragment3_precenter = new Fragment3_precenter(this);
fragment3_precenter.getprecenter();
//点击全选
fragment3_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (fragment3_checkBox.isChecked()) {
c = true;
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheck(c);
}
adapter.notifyDataSetChanged();
} else {
c = false;
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheck(c);
}
}
adapter.notifyDataSetChanged();
}
});
fragment3_checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkSeller(fragment3_checkBox.isChecked());
//刷新商家适配器
adapter.notifyDataSetChanged();
}
});
return view;
}
@Override
public void getview(String s) {
Log.i("SSS", "333" + s);
Gson gson = new Gson();
Gouwuche gouwuche = gson.fromJson(s, Gouwuche.class);
list = gouwuche.getData();
adapter = new Fragment3_adapter(getActivity(), list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
fragment3_recyclerView.setLayoutManager(linearLayoutManager);
fragment3_recyclerView.setAdapter(adapter);
/*
*选中全部商家,全选 / 全不选按钮选中
* 根据选中的商品数量和所有的商品数量比较判断
*/
//*****1.回调商家适配器里的接口
adapter.setListener(new Fragment3_adapter.ShopCallBackListener() {
@Override
public void callBack(List<Gouwuche.DataBean> list) {
//在这里重新遍历已经改状态后的数据,
// 这里不能break跳出,因为还需要计算后面点击商品的价格和数目,所以必须跑完整个循环
double totalPrice = 0;
//勾选商品的数量,不是该商品购买的数量
int num = 0;
//所有商品总数,和上面的数量做比对,如果两者相等,则说明全选
int totalNum = 0;
for (int a = 0; a < list.size(); a++) {
//获取商家里的商品
List<Gouwuche.DataBean.ListBean> listAll = list.get(a).getList();
//循环商品集合
for (int i = 0; i < listAll.size(); i++) {
//***3.得到所有商品的总数
totalNum = totalNum + listAll.get(i).getNum();
Log.i("totalNum", "数量" + totalNum);
//****4.如果有商品选中----取选中的状态
if (listAll.get(i).isCheck()) {
//选中的商品价格
totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
//选中商品的数量
num = num + listAll.get(i).getNum();
}
}
}
if (num == totalNum) {
//是全部选中
fragment3_checkBox.setChecked(true);
} else {
//不是全部选中
fragment3_checkBox.setChecked(false);
}
fragment3_zongjia.setText("总价" + totalPrice);
fragment3_zongjianshu.setText("总数量" + num);
}
});
}
/**
* 全选/全不选复选框选中
* 1.所有商家的复选框选中
* 2.所有的商品复选框选中
* 修改选中状态,获取价格和数量
*/
private void checkSeller(boolean bool) {
double totalPrice = 0;
int num = 0;
for (int a = 0; a < list.size(); a++) {
//****1.遍历商家,改变状态---设置商家状态为全选中
Gouwuche.DataBean dataBean = list.get(a);
dataBean.setCheck(bool);
//得到所有的商品
List<Gouwuche.DataBean.ListBean> listAll = list.get(a).getList();
for (int i = 0; i < listAll.size(); i++) {
//****2.遍历商品,改变状态---设置商家的商品全部选中
listAll.get(i).setCheck(bool);
//计算总价
totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
//计算总数量
num = num + listAll.get(i).getNum();
}
}
if (bool) {
fragment3_zongjia.setText("总价" + totalPrice);
fragment3_zongjianshu.setText("总数量(" + num + ")");
} else {
fragment3_zongjia.setText("总价:0.00");
fragment3_zongjianshu.setText("总数量(0)");
}
}
商家adapter
public class Fragment3_adapter extends RecyclerView.Adapter<Fragment3_adapter.VVH> {
Context context;
private List<Gouwuche.DataBean> list;
LayoutInflater layoutInflater;
public Fragment3_adapter(Context context, List<Gouwuche.DataBean> list) {
this.layoutInflater = LayoutInflater.from(context);
this.context = context;
this.list = list;
}
private ShopCallBackListener mShopCallBackListener;
public void setListener(ShopCallBackListener listener) {
this.mShopCallBackListener = listener;
}
public interface ShopCallBackListener {
void callBack(List<Gouwuche.DataBean> list);
}
//商家
@NonNull
@Override
public VVH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = layoutInflater.inflate(R.layout.fragment3_adapter, viewGroup, false);
VVH vvh = new VVH(view);
return vvh;
}
@Override
public void onBindViewHolder(@NonNull final VVH vvh, final int i) {
vvh.name.setText(list.get(i ).getSellerName());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
vvh.recyclerView.setLayoutManager(linearLayoutManager);
final List<Gouwuche.DataBean.ListBean> list1 = this.list.get(i).getList();
final Fragment3_adapter_rcerview rcerview = new Fragment3_adapter_rcerview(context, list1);
vvh.recyclerView.setAdapter(rcerview);
vvh.checkbox.setChecked(list.get(i).isCheck());
//回调商品的接口
//商品全部选中,商家选中
rcerview.setListener(new Fragment3_adapter_rcerview.getdata() {
@Override
public void callBack() {
if (mShopCallBackListener!=null) {
mShopCallBackListener.callBack(list);
}
//*****2.创建一个临时的标志位,用来记录现在点击的状态
boolean isAllChecked = true;
//遍历所有商品
for (int s=0;s<list1.size();s++) {
if (!list1.get(s).isCheck()) {
//只要有一个商品未选中,标志位设置成false,并且跳出循环
isAllChecked = false;
break;
}
}
//刷新商家状态
vvh.checkbox.setChecked(isAllChecked);
//商品的选中状态
list.get(i).setCheck(isAllChecked);
}
});
//商家选中,商家下的商品全部选中
//监听checkBox的点击事件
//目的是改变旗下所有商品的选中状态
vvh.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//首先改变自己的标志位
list.get(i).setCheck(vvh.checkbox.isChecked());
//调用产品adapter的方法,用来全选和反选
rcerview.selectOrRemoveAll(vvh.checkbox.isChecked());
}
});
}
@Override
public int getItemCount() {
return list.size()-1;
}
public void setList(List<Gouwuche.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
class VVH extends RecyclerView.ViewHolder {
private final CheckBox checkbox;
private final TextView name;
private final RecyclerView recyclerView;
public VVH(@NonNull View itemView) {
super(itemView);
checkbox = itemView.findViewById(R.id.checkbox);
name = itemView.findViewById(R.id.name);
recyclerView = itemView.findViewById(R.id.RecyclerView);
}
}
商品adapter
public class Fragment3_adapter_rcerview extends RecyclerView.Adapter<Fragment3_adapter_rcerview.VVH> {
Context context;
List<Gouwuche.DataBean.ListBean> listx;
LayoutInflater layoutInflater;
public Fragment3_adapter_rcerview(Context context, List<Gouwuche.DataBean.ListBean> list) {
this.layoutInflater = LayoutInflater.from(context);
this.context = context;
this.listx = list;
}
//创建接口回调
private getdata getdata;
public void setListener(getdata getdata1) {
this.getdata = getdata1;
}
public interface getdata {
void callBack();
}
//在我们子商品的adapter中,修改子商品的全选和反选
public void selectOrRemoveAll(boolean checked) {
//商品循环
for (int s = 0; s < listx.size(); s++) {
listx.get(s).setCheck(checked);
}
notifyDataSetChanged();
}
@NonNull
@Override
public VVH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.fragment3_adapter_rcerview, null);
VVH vvh = new VVH(view);
return vvh;
}
@Override
public void onBindViewHolder(@NonNull final VVH vvh, final int i) {
vvh.text.setText(listx.get(i).getTitle());
vvh.qian.setText(listx.get(i).getPrice() + "");
vvh.shuliang.setText(listx.get(i).getNum() + "");
Glide.with(context).load(listx.get(i).getImages().split("\\|")[0].replace("https", "http")).into(vvh.img);
//根据我记录的状态,改变勾选
vvh.fragment3_adapter_rcerview_checkBox.setChecked(listx.get(i).isCheck());
//商品的跟商家的有所不同,商品添加了选中状态改变的监听
vvh.fragment3_adapter_rcerview_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//优先改变自己的状态
listx.get(i).setCheck(isChecked);
//回调,目的是告诉acrivity,有人选中状态改变
if (getdata != null) {
getdata.callBack();
}
}
});
//设置自定义View里的Edit
vvh.view_zidingyi.setData(this, listx, i);
//调取view里自定义的接口回调方法
vvh.view_zidingyi.setOnCallBack(new com.example.zh.xiangmu.View.CallBackListener() {
@Override
public void callBack() {
if (getdata != null) {
getdata.callBack();
}
}
}
);
}
@Override
public int getItemCount() {
return listx.size();
}
class VVH extends RecyclerView.ViewHolder {
private final ImageView img;
private final TextView text;
private final TextView qian;
private final com.example.zh.xiangmu.View view_zidingyi;
private final EditText shuliang;
private final CheckBox fragment3_adapter_rcerview_checkBox;
public VVH(@NonNull View itemView) {
super(itemView);
fragment3_adapter_rcerview_checkBox = itemView.findViewById(R.id.Fragment3_adapter_rcerview_CheckBox);
img = itemView.findViewById(R.id.img);
text = itemView.findViewById(R.id.text);
qian = itemView.findViewById(R.id.qian);
view_zidingyi = itemView.findViewById(R.id.view_zidingyi);
shuliang = itemView.findViewById(R.id.shuliang);
}
}
自定义view
public class View extends RelativeLayout {
private final Button jia;
private final Button jian;
private final TextView shuliang;
private List<Gouwuche.DataBean.ListBean> mList = new ArrayList<>();
public View(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.view, this);
jia = findViewById(R.id.jia);
jian = findViewById(R.id.jian);
shuliang = findViewById(R.id.shuliang);
//点击加号
jia.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View v) {
String s = shuliang.getText().toString();
if (!s.equals("")) {
int i1 = Integer.parseInt(s);
i1++;
shuliang.setText(i1 + “”);
//把点击后的值放进集合
list.get(position).setNum(i1);
//调用自己定义的接口
listener.callBack();
//刷新商品适配器
mMyShopAdapter.notifyItemChanged(position);
}
}
});
jian.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View v) {
String s = shuliang.getText().toString();
if (!s.equals("")) {
int i1 = Integer.parseInt(s);
if (i1 >= 2) {
i1--;
shuliang.setText(i1 + "");
//把点击后的值放进集合
list.get(position).setNum(i1);
//调用自己定义的接口
listener.callBack();
//刷新商品适配器
mMyShopAdapter.notifyItemChanged(position);
}
}
}
});
}
//传递的数据
private List<Gouwuche.DataBean.ListBean> list = new ArrayList<>();
private int position;
private Fragment3_adapter_rcerview mMyShopAdapter;
private int num;
//创建data方法
public void setData(Fragment3_adapter_rcerview mMyShopAdapter, List<Gouwuche.DataBean.ListBean> list, int i) {
this.list = list;
this.mMyShopAdapter = mMyShopAdapter;
position = i;
//取出集合里的值
num = list.get(i).getNum();
//给数量赋值
shuliang.setText(num + “”);
}
public void setJia(OnClickListener listener) {
jia.setOnClickListener(listener);
}
public void setJian(OnClickListener listener) {
jian.setOnClickListener(listener);
}
public void setShuliang(String listener) {
shuliang.setText(listener);
}
;
//创建接口回调
private CallBackListener listener;
//创建方法
public void setOnCallBack(CallBackListener listener) {
this.listener = listener;
}
//创建接口
public interface CallBackListener {
void callBack();
}