您的位置:首页 > 移动开发 > Android开发

android二级列表购物车

2017-11-21 10:36 471 查看
一.导入EventBus的依赖
compile 'org.greenrobot:eventbus:3.1.1'

eventBus必须注册
EventBus.getDefault().register(this);
必销毁
//销毁方法
@Override
protected void onDestroy() {
super.onDestroy();
//eventBus销毁
EventBus.getDefault().unregister(this);

}

二.级列表的适配器

public class ExlvAdapter extends BaseExpandableListAdapter {
private static final String TAG = "ExlvAdapter";
private Context context;
private List<CarBean.DataBean> groupList;
private List<List<CarBean.DataBean.ListBean>> childList;
private boolean allGroupCbSelect;

public ExlvAdapter(Context context, List<CarBean.DataBean> groupList, List<List<CarBean.DataBean.ListBean>> childList) {
this.context = context;
this.groupList = groupList;
this.childList = childList;
}

@Override
public int getGroupCount() {
return groupList.size();
}

@Override
public int getChildrenCount(int i) {
return childList.get(i).size();
}

@Override
public Object getGroup(int i) {
return groupList.get(i);
}

@Override
public Object getChild(int i, int i1) {
return childList.get(i).get(i1);
}

@Override
public long getGroupId(int i) {
return i;
}

@Override
public long getChildId(int i, int i1) {
return i1;
}

@Override
public boolean hasStableIds() {
return false;
}

//一级列表布局
@Override
public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
final CarBean.DataBean dataBean = groupList.get(i);
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = View.inflate(context, R.layout.exlv_item, null);
holder.textView = (TextView) view.findViewById(R.id.g_title);
holder.che = (CheckBox) view.findViewById(R.id.che);
view.setTag(holder);

} else {
holder = (ViewHolder) view.getTag();
}
holder.textView.setText(dataBean.getSellerName());
//设置一级列表checkBox的状态
holder.che.setChecked(dataBean.isChecked());
//一级列表checkBox的点击事件
holder.che.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//判断一级列表复选框的状态  设置为true或false
dataBean.setChecked(holder.che.isChecked());
//改变二级checkbod的状态
changeChildCbState(i, holder.che.isChecked());
//算钱
EventBus.getDefault().post(computer());
//改变全选状态   isAllGroupCbSelect判断一级是否全部选中
changeAllCbState(isAllGroupCbSelect());
//必刷新
notifyDataSetChanged();
}
});
return view;
}

//二级列表布局
@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
final CarBean.DataBean.ListBean listBean = childList.get(i).get(i1);
final ViewHolder2 holder2;
if (view == null) {
holder2 = new ViewHolder2();
view = View.inflate(context, R.layout.exlv_item2, null);
holder2.z_title = (TextView) view.findViewById(R.id.z_title);
holder2.z_che = (CheckBox) view.findViewById(R.id.z_che);
holder2.img = (ImageView) view.findViewById(R.id.z_img);
holder2.price = view.findViewById(R.id.z_price);
holder2.xiangqing = view.findViewById(R.id.z_shuxing);
holder2.jian = view.findViewById(R.id.iv_jian);
holder2.jia = view.findViewById(R.id.iv_add);
holder2.del = view.findViewById(R.id.del);
holder2.num = view.findViewById(R.id.tv_num);
view.setTag(holder2);

} else {
holder2 = (ViewHolder2) view.getTag();
}
holder2.num.setText(listBean.getNum() + "");
holder2.z_title.setText(listBean.getTitle());
holder2.price.setText("¥" + listBean.getPrice());
holder2.xiangqing.setText(listBean.getSubhead());
//设置二级列表checkbox的属性
holder2.z_che.setChecked(listBean.isChecked());
String images = listBean.getImages();
String[] split = images.split("\\|");
Glide.with(context).load(split[0]).into(holder2.img);
//二级列表的点击事件
holder2.z_che.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置该条目中的checkbox属性值
listBean.setChecked(holder2.z_che.isChecked());
//计算价钱
PriceAndCountEvent priceAndCountEvent = computer();
EventBus.getDefault().post(priceAndCountEv
4000
ent);

//判断当前checkbox是选中的状态
if (holder2.z_che.isChecked()) {
//如果全部选中(isAllChildCbSelected)
if (isAllChildCbSelected(i)) {
//改变一级列表的状态
changeGroupCbState(i, true);
//改变全选的状态
changeAllCbState(isAllGroupCbSelect());
}
} else {
//如果没有全部选中,一级列表的checkbox为false不为选中
changeGroupCbState(i, false);
changeAllCbState(isAllGroupCbSelect());
}
notifyDataSetChanged();
}
});
//加号
holder2.jia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num = listBean.getNum();
//num为int类型所以要加空字符串
holder2.num.setText(++num + "");
listBean.setNum(num);
//如果二级列表的checkbox为选中,计算价钱
if (holder2.z_che.isChecked()) {
PriceAndCountEvent priceAndCountEvent = computer();
EventBus.getDefault().post(priceAndCountEvent);
}
}
});
//减号
holder2.jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num = listBean.getNum();
if (num == 1) {
return;
}
holder2.num.setText(--num + "");
listBean.setNum(num);
if (holder2.z_che.isChecked()) {
PriceAndCountEvent priceAndCountEvent = computer();
EventBus.getDefault().post(priceAndCountEvent);
}
}
});
//删除
holder2.del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List<CarBean.DataBean.ListBean> listBeen = childList.get(i);
CarBean.DataBean.ListBean remove = listBeen.remove(i1);
if (listBeen.size() == 0) {
//先移除二级列表的集合,再移除一级列表的集合
childList.remove(i);
groupList.remove(i);
}
//算钱
EventBus.getDefault().post(computer());
notifyDataSetChanged();
}
});
return view;
}

@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}

class ViewHolder {
TextView textView;
CheckBox che;
}

class ViewHolder2 {
ImageView img;
TextView z_title;
CheckBox z_che;
TextView price;
TextView xiangqing;
ImageView jia;
ImageView jian;
ImageView del;
TextView num;
}

//改变二级列表的checkbox的状态   如果一级选中,控制二级也选中
private void changeChildCbState(int i, boolean flag) {
List<CarBean.DataBean.ListBean> listBeen = childList.get(i);
for (int j = 0; j < listBeen.size(); j++) {
CarBean.DataBean.ListBean listBean = listBeen.get(j);
listBean.setChecked(flag);
}
Log.i(TAG, "changeChildCbState: ");
}

//判断一级列表是否全部选中
public boolean isAllGroupCbSelect() {
for (int i = 0; i < groupList.size(); i++) {
CarBean.DataBean dataBean = groupList.get(i);
if (!dataBean.isChecked()) {
return false;
}
}
return true;
}

//改变全选的状态
private void changeAllCbState(boolean flag) {
MessageEvent messageEvent = new MessageEvent();
messageEvent.setChecked(flag);
EventBus.getDefault().post(messageEvent);
}

//改变一级列表的checkbox的状态
private void changeGroupCbState(int i, boolean flag) {
CarBean.DataBean dataBean = groupList.get(i);
dataBean.setChecked(flag);
}

//判断二级列表是否全部选中
private boolean isAllChildCbSelected(int i) {
List<CarBean.DataBean.ListBean> listBeen = childList.get(i);
for (int j = 0; j < listBeen.size(); j++) {
CarBean.DataBean.ListBean listBean = listBeen.get(j);
if (!listBean.isChecked()) {
return false;
}
}
return true;
}

//设置全选,反选
public void changeAllListCbState(boolean flag) {
for (int i = 0; i < groupList.size(); i++) {
changeGroupCbState(i, flag);
changeChildCbState(i, flag);
}
//算钱
EventBus.getDefault().post(computer());
//
notifyDataSetChanged();

}

//计算列表的价钱
private PriceAndCountEvent computer() {
int count = 0;
int price = 0;
for (int i = 0; i < childList.size(); i++) {
List<CarBean.DataBean.ListBean> listBeen = childList.get(i);
for (int j = 0; j < listBeen.size(); j++) {
CarBean.DataBean.ListBean listBean = listBeen.get(j);
if (listBean.isChecked()) {
price += listBean.getNum() * listBean.getPrice();
count += listBean.getNum();
}
}
}
PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent();
priceAndCountEvent.setCount(count);
priceAndCountEvent.setPrice(price);
return priceAndCountEvent;
}
}
三.创建两个类用来做全选和计算价钱

public class MessageEvent {
private boolean checked;

public boolean isChecked() {
return checked;
}

public void setChecked(boolean checked) {
this.checked = checked;
}
}

public class PriceAndCountEvent {
private int price;
private int count;

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}
}
四.Activity

//全选/全不选
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置全选
adapter.changeAllListCbState(checkBox.isChecked());
}
});

eventBus传值
//必写注解
@Subscribe
public void onMessageEvent(MessageEvent event) {
checkBox.setChecked(event.isChecked());
}

@Subscribe
public void onMessageEven(PriceAndCountEvent event) {
price.setText("总价" + event.getPrice());
num.setText("共" + event.getCount() + "件商品");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: