public class MyAdapter extends BaseExpandableListAdapter {
private List<News.DataBean> mList;
private ParentHolder holder;
public MyAdapter(List<News.DataBean> list) {
mList = list;
}
@Override
public int getGroupCount() {
return mList == null? 0 : mList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mList.get(groupPosition).getList() ==null?
0:mList.get(groupPosition).getList().size();
}
@Override //组的布局
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
News.DataBean dataBean = mList.get(groupPosition);
ParentHolder parent1;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_cart_parent, null);
parent1 = new ParentHolder(convertView);
convertView.setTag(parent1);
}else {
parent1 = (ParentHolder) convertView.getTag();
}
parent1.seller_name_tv.setText(dataBean.getSellerName());
boolean selected = isSelected(groupPosition);
parent1.seller_cb.setChecked(selected);
parent1.seller_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnCKChangeListener.onGroupCheckedChange(groupPosition);
}
});
return convertView;
}
@Override //子条目的布局
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
//子条目所有的数据
News.DataBean bean = mList.get(groupPosition);
List<News.DataBean.ListBean> list = bean.getList();
//拿到List集合里具体商品
News.DataBean.ListBean listBean = list.get(childPosition);
ChildViewHolder childViewHolder;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_cart_child, null);
childViewHolder = new ChildViewHolder(convertView);
convertView.setTag(childViewHolder);
} else {
childViewHolder=(ChildViewHolder)convertView.getTag();
}
//设置图片
String images = bean.getList().get(childPosition).getImages();
String[] split = images.split("!");
ImageLoader.getInstance().displayImage(split[0],childViewHolder.product_icon_iv);
//设置商品名字
childViewHolder.product_title_name_tv.setText(listBean.getTitle());
//设置商品单价
childViewHolder.product_price_tv.setText(listBean.getPrice()+"");
//设置复选框是否选中
childViewHolder.child_cb.setChecked(listBean.getSelected() == 1);
//设置组合式自定义控件内部的数量
childViewHolder.add_remove_view.setNumber(listBean.getNum());
//设置商品CheckBox的点击事件,通过接口回调,暴露给外面
childViewHolder.child_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnCKChangeListener !=null ){
mOnCKChangeListener.onChilderCheckedChange(groupPosition,childPosition);
}
}
});
childViewHolder.add_remove_view.setOnNumberChangeListener(new MyAddSubView.OnNumberChangeListener() {
@Override
public void onNumberChange(int num) {
if (mOnCKChangeListener!=null){
mOnCKChangeListener.onNumberChange(groupPosition,childPosition,num);
}
}
});
return convertView;
}
///创建ViewHolder//
//创建组的ViewHodler
public static class ParentHolder{
public CheckBox seller_cb;
public TextView seller_name_tv;
public ParentHolder(View rootView){
this.seller_cb = rootView.findViewById(R.id.seller_cb);
this.seller_name_tv = rootView.findViewById(R.id.seller_name_tv);
}
}
//创建子条目的ViewHolder
public static class ChildViewHolder {
public CheckBox child_cb;
public ImageView product_icon_iv;
public TextView product_title_name_tv;
public TextView product_price_tv;
public MyAddSubView add_remove_view;
public ChildViewHolder(View rootView) {
this.child_cb = rootView.findViewById(R.id.child_cb);
this.product_icon_iv = rootView.findViewById(R.id.product_icon_iv);
this.product_title_name_tv =rootView.findViewById(R.id.product_title_name_tv);
this.product_price_tv = rootView.findViewById(R.id.product_price_tv);
this.add_remove_view = rootView.findViewById(R.id.add_remove_view);
}
}
不用在意的方法
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
/购物车特有的方法///
//判断当前商家所有商品是否被选中(一种是所有的都被选中,一种是没有所有的都选中)
public boolean isSelected(int groupPosition){
//拿到对应组的数据
News.DataBean dataBean = mList.get(groupPosition);
//拿到商家的所有商品数据
List<News.DataBean.ListBean> list = dataBean.getList();
for (News.DataBean.ListBean listBean: list){
if (listBean.getSelected() == 0){
return false;
}
}
return true;
}
//底部全选逻辑
public boolean isAllSelected(){
for (int x =0;x<mList.size();x++){
News.DataBean dataBean = mList.get(x);
List<News.DataBean.ListBean> list = dataBean.getList();
for (int j = 0;j<list.size();j++){
if (list.get(j).getSelected() == 0){
return false;
}
}
}
return true;
}
//计算商品总数量
public int onZNumber(){
int toTaNumber = 0;
for (int i = 0;i<mList.size();i++){
News.DataBean dataBean = mList.get(i);
List<News.DataBean.ListBean> list = dataBean.getList();
for(int j = 0;j<list.size();j++){
if (list.get(j).getSelected() == 1){
int num = list.get(j).getNum();
toTaNumber+=num;
}
}
}
return toTaNumber;
}
//计算总价格
public Double onZPrice(){
double toTaPrice = 0;
for (int n = 0;n<mList.size();n++){
News.DataBean dataBean = mList.get(n);
List<News.DataBean.ListBean> list = dataBean.getList();
for (int m = 0;m<list.size();m++){
News.DataBean.ListBean listBean = list.get(m);
if (listBean.getSelected() == 1){
double price = listBean.getPrice();
toTaPrice+=price;
}
}
}
return toTaPrice;
}
//商品组的全选框点击时 ==全选
public void groupCheckBoxChecked(int groupPosition,boolean isSelected){
News.DataBean dataBean = mList.get(groupPosition);
List<News.DataBean.ListBean> list = dataBean.getList();
for (int x = 0;x<list.size();x++){
News.DataBean.ListBean listBean = list.get(x);
listBean.setSelected(isSelected ? 1 : 0);
}
}
//当商家的子条目全选中时更新全选框的状态
public void ChilderCheckBoxChecked(int groupPosition,int childPosition){
News.DataBean dataBean = mList.get(groupPosition);
List<News.DataBean.ListBean> list = dataBean.getList();
News.DataBean.ListBean listBean = list.get(childPosition);
listBean.setSelected(listBean.getSelected()==0?1:0);
}
//但底部的全选矿被选中时
public void buttonCheckBoxChecked(boolean selected){
for (int x = 0;x<mList.size();x++){
News.DataBean dataBean = mList.get(x);
List<News.DataBean.ListBean> list = dataBean.getList();
for (int j = 0;j<list.size();j++){
list.get(j).setSelected(selected?1:0);
}
}
}
//当加减器被点击时,改变里面当前商品的数量
public void onChangeNumber(int groupPosion,int childPositon,int number){
News.DataBean dataBean = mList.get(groupPosion);
List<News.DataBean.ListBean> list = dataBean.getList();
News.DataBean.ListBean listBean = list.get(childPositon);
listBean.setNum(number);
}
//接口的固定格式///
public interface onCKChangeListener{
/*
当商家的CheckBox被点击时回调
*/
void onGroupCheckedChange(int groupPosition);
/*
当商家的子条目商品被点击时回调
*/
void onChilderCheckedChange(int groupPosition,int childPosition);
/*
当点击加减按钮时回调
*/
void onNumberChange(int groupPosition,int childPosition,int number);
}
onCKChangeListener mOnCKChangeListener;
public void setOnCKChangeListener(onCKChangeListener onCKChangeListener){
mOnCKChangeListener = onCKChangeListener;
}
}