Android 可以全选 单选 展开收起的ExpandListView列表

如图:

1.activity

public class HousingBillsActivity extends BaseActivity {

    @BindView(R.id.rlBack)
    RelativeLayout rlBack;
    @BindView(R.id.tvTitleName)
    TextView tvTitleName;
    @BindView(R.id.tvAddress)
    TextView tvAddress;
    @BindView(R.id.tvName)
    TextView tvName;
    @BindView(R.id.tvClickAll)
    TextView tvClickAll;
    @BindView(R.id.expanfListView)
    ExpandableListView expanfListView;
    @BindView(R.id.tvJine)
    TextView tvJine;
    @BindView(R.id.tvjiaofei)
    TextView tvjiaofei;
    private Context context = this;
    private BillsExpandListView billsExpandListView;
    private List group;
    private List> child;
    private List beans;
    private boolean choose = true;
    private List test = new ArrayList<>();
    private PopupWindow mPopWindow;
    private String pay = "";

    @Override
    public void setContentView() {
        setContentView(R.layout.activity_housing_bills);
        EventBus.getDefault().register(this);
    }

    @Override
    public void initData() {
        tvTitleName.setText("房屋账单");
        group = new ArrayList();
        child = new ArrayList>();
        beans = new ArrayList<>();
        addInfo("高层物业费", new String[]{"账单周期", "账单日"}, false);
        addInfo("电梯费", new String[]{"电梯费", "电费"}, false);
        billsExpandListView = new BillsExpandListView(context, group, child, beans);
        expanfListView.setAdapter(billsExpandListView);
        test.add("100");
        test.add("200");
    }

    public void addInfo(String g, String[] c, boolean b) {
        group.add(g);
        beans.add(new CheckListViewBean(b));
        List item = new ArrayList<>();
        for (int i = 0; i < c.length; i++) {
            item.add(c[i]);
        }
        child.add(item);
    }

    @OnClick({R.id.rlBack, R.id.tvClickAll, R.id.tvjiaofei})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.rlBack:
                finish();
                break;
            case R.id.tvClickAll:
                if (choose) {
                    for (int i = 0; i < beans.size(); i++) {
                        beans.get(i).checked = true;
                    }
                    Drawable drawableLeft = getResources().getDrawable(
                            R.drawable.bills_add_z);
                    tvClickAll.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,
                            null, null, null);
                    billsExpandListView.notifyDataSetChanged();
                    int sums = 0;
                    for (int i = 0; i < test.size(); i++) {
                        int j = Integer.parseInt(test.get(i));
                        sums += j;
                    }
                    tvJine.setText(sums + "");
                    choose = false;
                } else {
                    for (int i = 0; i < beans.size(); i++) {
                        beans.get(i).checked = false;
                    }
                    Drawable drawableLeft = getResources().getDrawable(
                            R.drawable.bills_add);
                    tvClickAll.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,
                            null, null, null);
                    billsExpandListView.notifyDataSetChanged();
                    tvJine.setText("0");
                    choose = true;
                }
                break;
            case R.id.tvjiaofei:
           
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent event) {
        if (event.getType().equals("账单")) {
            btnOperateList();
        }
    }

    public void btnOperateList() {
        List ids = new ArrayList<>();
        for (int i = 0; i < beans.size(); i++) {
            if (beans.get(i).checked) {
                ids.add(test.get(i));
            }
            if (!beans.get(i).checked) {//设置如果有一个项没选就取消全选
                Drawable drawableLeft = getResources().getDrawable(
                        R.drawable.bills_add);
                tvClickAll.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,
                        null, null, null);
            }
        }
        if (ids.size() == group.size()) {//把选中的添加到一个集合 然后用选中集合的size和总数据的size对比  相同的话就证明是全选了
            Drawable drawableLeft = getResources().getDrawable(
                    R.drawable.bills_add_z);
            tvClickAll.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,
                    null, null, null);
        }
        int sums = 0;//计算list中数据求和
        for (int i = 0; i < ids.size(); i++) {
            int j = Integer.parseInt(ids.get(i));
            sums += j;
        }
        tvJine.setText(sums + "");
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        if (mPopWindow != null && mPopWindow.isShowing()) {
            return false;
        }
        return super.dispatchTouchEvent(event);
    }
}

2.BillsExpandListView

private Context context;
List group;
List> child;
List beans;

public BillsExpandListView(Context context, List group, List> child, List beans) {
    this.context = context;
    this.group = group;
    this.child = child;
    this.beans = beans;
}

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

@Override
public int getChildrenCount(int groupPosition) {
    return child.size();

}

@Override
public Object getGroup(int groupPosition) {
    return group.get(groupPosition);

}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return child.get(groupPosition).get(childPosition);
}

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

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

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

@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    final GroupViewHolder groupViewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.partent_item, parent, false);
        groupViewHolder = new GroupViewHolder();
        groupViewHolder.tvName = convertView.findViewById(R.id.tvName);
        groupViewHolder.tvMoney = convertView.findViewById(R.id.tvMoney);
        groupViewHolder.ivJiantou = convertView.findViewById(R.id.ivJiantou);
        groupViewHolder.checkbox = convertView.findViewById(R.id.checkbox);
        convertView.setTag(groupViewHolder);
    } else {
        groupViewHolder = (GroupViewHolder) convertView.getTag();
    }
    groupViewHolder.tvName.setText(group.get(groupPosition));
    // 根据当前父条目的展开状态来设置不同的图片
    if (isExpanded) {
        // 条目未展开,设置向上的箭头
        groupViewHolder.ivJiantou.setImageDrawable(context.getResources()
                .getDrawable(R.drawable.bills_up));
    } else {
        // 条目展开,设置向下的箭头
        groupViewHolder.ivJiantou.setImageDrawable(context.getResources()
                .getDrawable(R.drawable.bills_dwon));
    }
    groupViewHolder.checkbox.setChecked(beans.get(groupPosition).checked);
    groupViewHolder.checkbox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (beans.get(groupPosition).checked) {
                beans.get(groupPosition).checked = false;
            } else {
                beans.get(groupPosition).checked = true;
            }
            EventBus.getDefault().post(new MessageEvent("账单", ""));
        }
    });
    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    ChildViewHolder childViewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_item, parent, false);
        childViewHolder = new ChildViewHolder();
        childViewHolder.tvName = convertView.findViewById(R.id.tvName);
        childViewHolder.tvTime = convertView.findViewById(R.id.tvTime);
        convertView.setTag(childViewHolder);
    } else {
        childViewHolder = (ChildViewHolder) convertView.getTag();
    }
    childViewHolder.tvName.setText(child.get(groupPosition).get(childPosition));
    return convertView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

static class GroupViewHolder {
    TextView tvName, tvMoney;
    ImageView ivJiantou;
    CheckBox checkbox;
}

static class ChildViewHolder {
    TextView tvName, tvTime;

}

3.CheckListViewBean

public class CheckListViewBean {
    public boolean checked;

    public CheckListViewBean(boolean check) {
        checked = check;
    }
}

4.partent_item





    

    

    

    

5.child_item




    

    

6.activity_housing_bills




    

    


        

            

            
        

        

            

            
        

        

        

            
        

        
    

    

        

            

            
        

        

    

7.MessageEvent

package com.tsq.junbanpt.aiui.bean;

public class MessageEvent {
    private String type;
    private String contect;

    public MessageEvent(String type, String contect) {
        this.type = type;
        this.contect = contect;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getContect() {
        return contect;
    }

    public void setContect(String contect) {
        this.contect = contect;
    }
}

8.用到eventbus

implementation 'org.greenrobot:eventbus:3.1.1'

你可能感兴趣的:(Android 可以全选 单选 展开收起的ExpandListView列表)