1activity布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.activity.MainActivity">
<ExpandableListView
android:id="@+id/expandable"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ExpandableListView>
<LinearLayout
android:orientation="horizontal"
android:id="@+id/linear_bottom"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:background="#999999"
android:layout_height="48dp">
<CheckBox
android:id="@+id/select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/price_all"
android:text="¥"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
2activity
package com.example.yuemo.view.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.example.yuemo.R;
import com.example.yuemo.model.GwcBean;
import com.example.yuemo.presenter.MainPresenter;
import com.example.yuemo.view.adapter.MyAdapter;
import com.example.yuemo.view.interfaces.IMainView;
import java.util.List;
public class MainActivity extends BaseActivity implements IMainView<GwcBean> {
private ExpandableListView expandableListView;
private CheckBox checkBox;
private TextView priceAll;
private MainPresenter mainPresenter;
private MyAdapter myAdapter;
@Override
protected int bindLayout() {
return R.layout.activity_main;
}
@Override
protected void initView() {
expandableListView = findViewById(R.id.expandable);
checkBox = findViewById(R.id.select_all);
priceAll = findViewById(R.id.price_all);
}
@Override
protected void initData() {
mainPresenter = new MainPresenter();
mainPresenter.loadDataNew();
mainPresenter.setView(this);
}
@Override
public void onSuccess(GwcBean gwcBean) {
myAdapter = new MyAdapter(this);
myAdapter.setData(gwcBean);
myAdapter.setCheckBox(checkBox);
myAdapter.setText(priceAll);
expandableListView.setAdapter(myAdapter);
}
@Override
public void onErr(String err) {
}
@Override
protected void onDestroy() {
super.onDestroy();
mainPresenter.loadDataNew();
}
}
3.adapter然后在bean类中生成两个get和set方法
package com.example.yuemo.view.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.yuemo.R;
import com.example.yuemo.model.GwcBean;
import com.example.yuemo.view.activity.MainActivity;
import java.util.List;
public class MyAdapter extends BaseExpandableListAdapter {
private Context mContext;
private GwcBean list;
private CheckBox mCheckBox;
private TextView mTextView;
private float toralPrice=0;
public MyAdapter(Context context) {
this.mContext=context;
}
public void setData(GwcBean gwcBean) {
this.list=gwcBean;
}
public void setCheckBox(CheckBox checkBox) {
this.mCheckBox=checkBox;
mCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox1=(CheckBox) v;
sumprice(checkBox1.isChecked());
selectAll(checkBox1.isChecked());
}
});
}
private void sumprice(boolean checked) {
toralPrice=0;
for (int i = 0; i < list.getData().size(); i++) {
GwcBean.DataBean dataBean = list.getData().get(i);
for (int j = 0; j < dataBean.getSpus().size(); j++) {
int price = dataBean.getSpus().get(j).getPraise_num();
if (checked){
toralPrice+=price;
}else{
toralPrice=0;
}
}
}
mTextView.setText("总价:¥"+toralPrice );
}
private void selectAll(boolean checked) {
for (int i = 0; i < list.getData().size(); i++) {
GwcBean.DataBean dataBean = list.getData().get(i);
dataBean.setIscheck(checked);
for (int j = 0; j <dataBean.getSpus().size() ; j++) {
GwcBean.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
spusBean.setCheck(checked);
}
}
notifyDataSetChanged();
}
public void setText(TextView priceAll) {
this.mTextView=priceAll;
}
@Override
public int getGroupCount() {
if (list==null){
return 0;
}
return list.getData().size();
}
@Override
public int getChildrenCount(int groupPosition) {
if (list==null){
return 0;
}
return list.getData().get(groupPosition).getSpus().size();
}
@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 true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder;
if (convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.item_group,null);
groupViewHolder = new GroupViewHolder();
groupViewHolder.checkBox=convertView.findViewById(R.id.checkbox_parent);
groupViewHolder.name=convertView.findViewById(R.id.shopName);
convertView.setTag(groupViewHolder);
}else{
groupViewHolder=(GroupViewHolder)convertView.getTag();
}
groupViewHolder.checkBox.setChecked(list.getData().get(groupPosition).isIscheck());
groupViewHolder.name.setText(list.getData().get(groupPosition).getName());
groupViewHolder.checkBox.setTag(groupPosition);
groupViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox=(CheckBox) view;
boolean checked = checkBox.isChecked();
int groupParseInt = Integer.parseInt(checkBox.getTag().toString());
for (int i = 0; i <list.getData().get(groupParseInt).getSpus().size(); i++) {
int praise_num1 = list.getData().get(groupParseInt).getSpus().get(i).getPraise_num();
if (checked){
toralPrice+=praise_num1;
}else{
toralPrice-=praise_num1;
}
}
mTextView.setText("总价:¥"+toralPrice);
list.getData().get(groupParseInt).setIscheck(checked);
selectGroup(groupParseInt,checked);
boolean selectAllGroup=isSelectAllGroup();
mCheckBox.setChecked(selectAllGroup);
notifyDataSetChanged();
}
});
return convertView;
}
private boolean isSelectAllGroup() {
for (int i = 0; i <list.getData().size() ; i++) {
GwcBean.DataBean dataBean =list.getData().get(i);
boolean ischeck = dataBean.isIscheck();
if (!ischeck){
return false;
}
}
return true;
}
private void selectGroup(int groupParseInt, boolean checked) {
for (int i = 0; i <list.getData().get(groupParseInt).getSpus().size() ; i++) {
GwcBean.DataBean.SpusBean spusBean=list.getData().get(groupParseInt).getSpus().get(i);
spusBean.setCheck(checked);
}
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder;
if (convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.item_child,null);
childViewHolder = new ChildViewHolder();
childViewHolder.name=convertView.findViewById(R.id.goodsName);
childViewHolder.price=convertView.findViewById(R.id.goodsPrice);
childViewHolder.image=convertView.findViewById(R.id.image);
childViewHolder.checkBox=convertView.findViewById(R.id.checkbox_child);
convertView.setTag(childViewHolder);
}else{
childViewHolder=(ChildViewHolder)convertView.getTag();
}
childViewHolder.name.setText(list.getData().get(groupPosition).getSpus().get(childPosition).getName());
childViewHolder.price.setText("¥:"+list.getData().get(groupPosition).getSpus().get(childPosition).getPraise_num());
childViewHolder.checkBox.setChecked(list.getData().get(groupPosition).getSpus().get(childPosition).isCheck());
Glide.with(mContext).load(list.getData().get(groupPosition).getSpus().get(childPosition).getPic_url()).into(childViewHolder.image);
childViewHolder.checkBox.setTag(groupPosition+"#"+childPosition);
childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
String tag = (String) checkBox.getTag();
int groupParseInt=Integer.parseInt(tag.split("#")[0]);
int childParseInt=Integer.parseInt(tag.split("#")[1]);
GwcBean.DataBean dataBean = list.getData().get(groupParseInt);
GwcBean.DataBean.SpusBean spusBean=dataBean.getSpus().get(childParseInt);
spusBean.setCheck(checkBox.isChecked());
int praise_num = spusBean.getPraise_num();
if (checkBox.isChecked()){
toralPrice+=praise_num;
}else{
toralPrice-=praise_num;
}
mTextView.setText("总价:¥"+toralPrice);
boolean selectGruop = isSelectGruop(groupParseInt);
dataBean.setIscheck(selectGruop);
boolean selectAllGroup = isSelectAllGroup();
mCheckBox.setChecked(selectAllGroup);
notifyDataSetChanged();
}
});
return convertView;
}
private boolean isSelectGruop(int groupParseInt) {
for (int i = 0; i < list.getData().get(groupParseInt).getSpus().size(); i++) {
GwcBean.DataBean.SpusBean spusBean=list.getData().get(groupParseInt).getSpus().get(i);
boolean check = spusBean.isCheck();
if (!check){
return false;
}
}
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
static class GroupViewHolder{
TextView name;
CheckBox checkBox;
}
static class ChildViewHolder{
TextView name,price;
CheckBox checkBox;
ImageView image;
}
}
4.父类条目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/checkbox_parent"
android:layout_width="wrap_content"
android:focusable="false"
android:clickable="true"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/shopName"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
5子类条目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_child"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"/>
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_marginLeft="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/goodsName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="111" />
<TextView
android:id="@+id/goodsPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="222" />
</LinearLayout>
</LinearLayout>