**
购物车Fragment中Mvp的成功回调方法
**
@Override
public void success(ShopBean shopBean) {
//实例化适配器
shopAdapter = new ShopAdapter(getActivity());
//获取数据
shopAdapter.setShopBean(shopBean);
//调用全选反选的方法
shopAdapter.setmCheckBox(mCheckQx);
//调用总价的方法
shopAdapter.setmPrice(mTextZj);
//设置适配器
mExpandView.setAdapter(shopAdapter);
//for循环,遍历展示二级列表数据
for (int i = 0; i < shopBean.getData().size(); i++) {
mExpandView.expandGroup(i);
}
}
**
加减器
**
package com.example.lx_shoppingcart.view.diyView;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.example.lx_shoppingcart.R;
import com.example.lx_shoppingcart.model.bean.ShopBean;
import com.example.lx_shoppingcart.view.adapter.ShopAdapter;
//继承linearLay,重写三个构造方法
public class AddMinusView extends LinearLayout {
//声明加,减的button按钮对象
private Button addTv,minusTv;
//声明数量的对象
private EditText numTv;
//创建一个int类型的数量的变量
private int nums=1;
//声明adapter的对象
private ShopAdapter shopAdapter;
//声明bean对象
private ShopBean shopBean;
public AddMinusView(Context context) {
super(context);
}
public AddMinusView(Context context, AttributeSet attrs) {
super(context, attrs);
//获取布局文件
LayoutInflater.from(context).inflate(R.layout.add_minus_view,this);
//为控件绑定id
addTv = findViewById(R.id.addTv);
minusTv = findViewById(R.id.minusTv);
numTv = findViewById(R.id.numTv);
//点击加的button
addTv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//数量累加
nums++;
//设置值给文本
numTv.setText(nums+"");
//判断接口非空
if (addMinusCallBack!=null){
//获取数量的值
addMinusCallBack.getAddMinus(nums);
}
}
});
//点击减的button
minusTv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//判断数量大小的底线值
if (nums<=1){
//进行吐司操作
Toast.makeText(getContext(),"商品数量不可小于一",Toast.LENGTH_SHORT).show();
}else {
//累减
nums--;
//设置值给文本
numTv.setText(nums+"");
//判断接口非空
if (addMinusCallBack!=null){
//获取值
addMinusCallBack.getAddMinus(nums);
}
}
}
});
}
//创建一个公开的方法,调用适配器数据
public void setData(ShopAdapter shopAdapter,ShopBean shopBean, int gid, int cid){
this.shopAdapter = shopAdapter;
this.shopBean = shopBean;
//获取bean类里的数量
nums = shopBean.getData().get(gid).getList().get(cid).getNum();
//设置值给文本
numTv.setText(nums+"");
}
public AddMinusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//声明接口对象
AddMinusCallBack addMinusCallBack;
//设置接口的set方法
public void setAddMinusCallBack(AddMinusCallBack addMinusCallBack) {
this.addMinusCallBack = addMinusCallBack;
}
//创建一个接口
public interface AddMinusCallBack{
void getAddMinus(int num);
}
}
**
购物车的适配器
**
package com.example.lx_shoppingcart.view.adapter;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.lx_shoppingcart.R;
import com.example.lx_shoppingcart.model.bean.ShopBean;
import com.example.lx_shoppingcart.view.diyView.AddMinusView;
import com.facebook.drawee.view.SimpleDraweeView;
public class ShopAdapter extends BaseExpandableListAdapter {
private ShopBean shopBean;
private Context context;
public ShopAdapter(Context context) {
this.context = context;
}
public void setShopBean(ShopBean shopBean) {
this.shopBean = shopBean;
}
private TextView mPrice;
//设置总价TextView的方法
public void setmPrice(TextView mPrice) {
this.mPrice = mPrice;
}
//创建一个获取总价的方法,调用四次
private void selectNumPrice(){
double total = 0;
for (int i = 0; i < shopBean.getData().size(); i++) {
for (int j = 0; j < shopBean.getData().get(i).getList().size(); j++) {
if (shopBean.getData().get(i).getList().get(j).isIscheck_child()){
total += shopBean.getData().get(i).getList().get(j).getPrice()*shopBean.getData().get(i).getList().get(j).getNum();
}
}
}
mPrice.setText(total+"");
}
private CheckBox mCheckBox;
//全选反选的set方法
public void setmCheckBox(final CheckBox mCheckBox) {
this.mCheckBox = mCheckBox;
mCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//绑定view
CheckBox checkBox = (CheckBox) view;
//全选的方法
selectAll(checkBox.isChecked());
//调用总价的方法
selectNumPrice();
//刷新页面
notifyDataSetChanged();
}
});
}
//创建全选的方法
private void selectAll(boolean checked) {
for (int i = 0; i < shopBean.getData().size(); i++) {
shopBean.getData().get(i).setIscheck_parent(checked);
for (int j = 0; j < shopBean.getData().get(i).getList().size(); j++) {
shopBean.getData().get(i).getList().get(j).setIscheck_child(checked);
}
}
//刷新视图
notifyDataSetChanged();
}
//一级数据返回数量
@Override
public int getGroupCount() {
return shopBean.getData().size();
}
//二级数据返回数量
@Override
public int getChildrenCount(int i) {
return shopBean.getData().get(i).getList().size();
}
@Override
public Object getGroup(int i) {
return null;
}
@Override
public Object getChild(int i, int i1) {
return null;
}
@Override
public long getGroupId(int i) {
return 0;
}
@Override
public long getChildId(int i, int i1) {
return 0;
}
@Override
public boolean hasStableIds() {
return true;
}
//一级列表数据
@Override
public View getGroupView(int i, final boolean b, View view, ViewGroup viewGroup) {
ParentViewHolder parentViewHolder;
if (view == null){
view = LayoutInflater.from(context).inflate(R.layout.parent_item,viewGroup,false);
parentViewHolder = new ParentViewHolder();
parentViewHolder.check_parent = view.findViewById(R.id.check_parent);
parentViewHolder.title_parent = view.findViewById(R.id.title_parent);
view.setTag(parentViewHolder);
}else {
parentViewHolder = (ParentViewHolder) view.getTag();
}
parentViewHolder.title_parent.setText(shopBean.getData().get(i).getSellerName());
parentViewHolder.check_parent.setChecked(shopBean.getData().get(i).isIscheck_parent());
//设置下标
parentViewHolder.check_parent.setTag(i);
//一级数据 状态的点击事件
parentViewHolder.check_parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//获取下标
int tag = (int) view.getTag();
//绑定视图
CheckBox checkBox = (CheckBox) view;
//一级状态,设置view状态
shopBean.getData().get(tag).setIscheck_parent(checkBox.isChecked());
//反选方法
selectChild_All(tag,checkBox.isChecked());
//获取全部一级的状态值,若全部为真,选中,否则,反之。
boolean b1 = selectParent();
//设置状态值
mCheckBox.setChecked(b1);
//调用总价的方法
selectNumPrice();
}
});
return view;
}
//遍历一级二级数据,给一级下标,二级数据根据一级数据变化
private void selectChild_All(int tag, boolean checked) {
for (int i = 0; i < shopBean.getData().size(); i++) {
for (int j = 0; j < shopBean.getData().get(tag).getList().size(); j++) {
shopBean.getData().get(tag).getList().get(j).setIscheck_child(checked);
}
}
notifyDataSetChanged();
}
//判断一级是否全部选中
private boolean selectParent() {
for (int i = 0; i < shopBean.getData().size(); i++) {
boolean checks = shopBean.getData().get(i).isIscheck_parent();
if (!checks){
return false;
}
}
return true;
}
//二级列表数据
@Override
public View getChildView(final int i, final int i1, final boolean b, View view, ViewGroup viewGroup) {
ChildViewHolder childViewHolder;
if (view == null){
view = LayoutInflater.from(context).inflate(R.layout.child_item,viewGroup,false);
childViewHolder = new ChildViewHolder();
childViewHolder.title_child = view.findViewById(R.id.title_child);
childViewHolder.price_child = view.findViewById(R.id.price_child);
childViewHolder.check_child = view.findViewById(R.id.check_child);
childViewHolder.image_child = view.findViewById(R.id.image_child);
childViewHolder.addMinusView = view.findViewById(R.id.addMinus);
view.setTag(childViewHolder);
}else {
childViewHolder = (ChildViewHolder) view.getTag();
}
childViewHolder.title_child.setText(shopBean.getData().get(i).getList().get(i1).getTitle());
childViewHolder.price_child.setText("总价:"+shopBean.getData().get(i).getList().get(i1).getPrice());
childViewHolder.check_child.setChecked(shopBean.getData().get(i).getList().get(i1).isIscheck_child());
//加减器的接口回调
childViewHolder.addMinusView.setAddMinusCallBack(new AddMinusView.AddMinusCallBack() {
@Override
public void getAddMinus(int num) {
//设置数量
shopBean.getData().get(i).getList().get(i1).setNum(num);
//调取总价的方法
selectNumPrice();
}
});
//加减器获取四个参数,适配器,bean对象,一级条目下标,二级条目下标
childViewHolder.addMinusView.setData(this,shopBean,i,i1);
Uri uri = Uri.parse(shopBean.getData().get(i).getList().get(i1).getImages());
childViewHolder.image_child.setImageURI(uri);
//设置下标
childViewHolder.check_child.setTag(i+"#"+i1);
//二级数据,状态的点击事件
childViewHolder.check_child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//绑定view
CheckBox checkBox = (CheckBox) view;
//获取下标
String tag = (String) view.getTag();
//获取一级二级下标
int parent = Integer.parseInt(tag.split("#")[0]);
int child = Integer.parseInt(tag.split("#")[1]);
//设置二级状态
shopBean.getData().get(parent).getList().get(child).setIscheck_child(checkBox.isChecked());
//遍历二级数据的状态,若全部为真,返回true,反之为false。
boolean b2 = selectChild(parent);
//一级数据设置状态
shopBean.getData().get(parent).setIscheck_parent(b2);
//遍历一级数据的状态,若全部为真,返回true,反之为false。
boolean b1 = selectParent();
mCheckBox.setChecked(b1);
//调取总价的方法
selectNumPrice();
notifyDataSetChanged();
}
});
return view;
}
//判断二级是否全部选中
private boolean selectChild(int parent) {
for (int i = 0; i < shopBean.getData().get(parent).getList().size(); i++) {
boolean ischeck = shopBean.getData().get(parent).getList().get(i).isIscheck_child();
if (!ischeck){
return false;
}
}
return true;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
class ParentViewHolder{
CheckBox check_parent;
TextView title_parent;
}
class ChildViewHolder{
CheckBox check_child;
TextView title_child,price_child;
SimpleDraweeView image_child;
AddMinusView addMinusView;
}
}