activity
package com.example.lianxi4shop;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.example.lianxi4shop.model.Mymodel;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
String url = "http://www.zhaoapi.cn/product/getCarts";
private ExpandableListView list;
private CheckBox check;
private TextView price;
private Button btn;
private MyAdapter mMyAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
HashMap<String ,String> map=new HashMap<>();
map.put("uid","71");
Mymodel mymodel=new Mymodel();
mymodel.doPost(url, map, new Mymodel.GetModel() {
@Override
public void fail(Exception e) { }
@Override
public void response(String s) {
ResponseBean responseBean = new Gson().fromJson(s, ResponseBean.class);
if ("0".equals(responseBean.getCode())){
List<ResponseBean.DataBean> data = responseBean.getData();
mMyAdapter=new MyAdapter(data);
mMyAdapter.setOnCartListChangeListener(new MyAdapter.onListChangeListener() {
@Override
public void onSellerCheckedChange(int groupPosition) {
boolean ischeck = mMyAdapter.ischeck(groupPosition);
mMyAdapter.changcheck(groupPosition,!ischeck);
mMyAdapter.notifyDataSetChanged();
refresh();
}
@Override
public void onProductCheckedChange(int groupPosition, int childPosition) {
mMyAdapter.changdange(groupPosition,childPosition);
mMyAdapter.notifyDataSetChanged();
refresh();
}
@Override
public void onProducNumberChange(int groupPosition, int childPosition, int number) {
mMyAdapter.updatePrice(groupPosition,childPosition,number);
mMyAdapter.notifyDataSetChanged();
refresh();
}
});
list.setAdapter(mMyAdapter);
for (int i = 0; i <data.size() ; i++) {
list.expandGroup(i);
}
refresh();
}
}
});
}
private void initView() {
list = (ExpandableListView) findViewById(R.id.list);
check = (CheckBox) findViewById(R.id.check);
price = (TextView) findViewById(R.id.price);
btn = (Button) findViewById(R.id.btn);
check.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.check:
boolean ischecked = mMyAdapter.ischecked();
mMyAdapter.changAll(!ischecked);
mMyAdapter.notifyDataSetChanged();
refresh();
break;
}
}
public void refresh(){
boolean ischecked = mMyAdapter.ischecked();
check.setChecked(ischecked);
int i = mMyAdapter.numAll();
btn.setText(i+"");
float prices = mMyAdapter.price();
price.setText(prices+"");
}
}
adapter
package com.example.lianxi4shop;
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.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
/**
* date:2018.11.20
* author:赵颖冰(lenovo)
* function:
*/
class MyAdapter extends BaseExpandableListAdapter {
List<ResponseBean.DataBean> list;
public MyAdapter(List<ResponseBean.DataBean> data) {
list = data;
}
@Override
public int getGroupCount() {
return list == null ? 0 : list.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).getList() == null ? 0 : list.get(groupPosition).getList().size();
}
//创建接口/
public interface onListChangeListener{
//当商家的checkBox点击时回调
void onSellerCheckedChange(int groupPosition);
//当点击子条目商品的CheckBox回调
void onProductCheckedChange(int groupPosition ,int childPosition);
//当点击加减按钮的回调
void onProducNumberChange(int groupPosition , int childPosition , int number);
}
//D.
onListChangeListener mOnListChangeListener;
//D.
public void setOnCartListChangeListener(onListChangeListener onListChangeListener){
mOnListChangeListener = onListChangeListener ;
}
/创建viewholder/
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ResponseBean.DataBean dataBean = list.get(groupPosition);
GroupHolder groupHolder;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_group, null);
groupHolder = new GroupHolder(convertView);
convertView.setTag(groupHolder);
} else {
groupHolder = (GroupHolder) convertView.getTag();
}
groupHolder.shopname.setText(dataBean.getSellerName());
boolean ischeck = ischeck(groupPosition);
groupHolder.checkbox_group.setChecked(ischeck);
groupHolder.checkbox_group.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnListChangeListener.onSellerCheckedChange(groupPosition);
}
});
return convertView;
}
public boolean ischeck(int groupPosition) {
List<ResponseBean.DataBean.ListBean> listBeans = list.get(groupPosition).getList();
for (int j = 0; j < listBeans.size(); j++) {
int selected = listBeans.get(j).getSelected();
if (selected==0){
return false;
}
}
return true;
}
public boolean ischecked() {
for (int i = 0; i < list.size(); i++) {
List<ResponseBean.DataBean.ListBean> listBeans = list.get(i).getList();
for (int j = 0; j < listBeans.size(); j++) {
int selected = listBeans.get(j).getSelected();
if (selected==0){
return false;
}
}
}
return true;
}
public int numAll(){
int nums=0;
for (int i = 0; i < list.size(); i++) {
List<ResponseBean.DataBean.ListBean> listBeans = list.get(i).getList();
for (int j = 0; j < listBeans.size(); j++) {
if (listBeans.get(j).getSelected()==1){
int num = listBeans.get(j).getNum();
nums+=num;
}
}
}
return nums;
}
public float price(){
int prices=0;
for (int i = 0; i < list.size(); i++) {
List<ResponseBean.DataBean.ListBean> listBeans = list.get(i).getList();
for (int j = 0; j < listBeans.size(); j++) {
if (listBeans.get(j).getSelected()==1){
int num = listBeans.get(j).getNum();
float price = listBeans.get(j).getPrice();
prices+=num*price;
}
}
}
return prices;
}
public void updatePrice(int groupPosition,int childPosition,int num){
list.get(groupPosition).getList().get(childPosition).setNum(num);
}
public void changAll(boolean ischeck){
for (int i = 0; i < list.size(); i++) {
List<ResponseBean.DataBean.ListBean> listBeans = list.get(i).getList();
for (int j = 0; j <listBeans.size(); j++) {
listBeans.get(j).setSelected(ischeck?1:0);
}
}
}
public void changdange(int groupPosition,int childPosition){
List<ResponseBean.DataBean.ListBean> listBeans = list.get(groupPosition).getList();
ResponseBean.DataBean.ListBean listBean = listBeans.get(childPosition);
listBean.setSelected(listBean.getSelected()==0?1:0);
}
public void changcheck(int groupPosition,boolean ischeck){
List<ResponseBean.DataBean.ListBean> listBeans = list.get(groupPosition).getList();
for (int i = 0; i <listBeans.size() ; i++) {
ResponseBean.DataBean.ListBean listBean = listBeans.get(i);
listBean.setSelected(ischeck?1:0);
}
}
public static class GroupHolder {
public View rootView;
public CheckBox checkbox_group;
public TextView shopname;
public GroupHolder(View rootView) {
this.rootView = rootView;
this.checkbox_group = (CheckBox) rootView.findViewById(R.id.checkbox_group);
this.shopname = (TextView) rootView.findViewById(R.id.shopname);
}
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder;
if (convertView == null) {
childViewHolder=new ChildViewHolder();
convertView = View.inflate(parent.getContext(), R.layout.item_child, null);
childViewHolder.product_icon_iv=convertView.findViewById(R.id.product_icon_iv);
childViewHolder.product_title_name_tv=convertView.findViewById(R.id.product_title_name_tv);
childViewHolder.product_price_tv=convertView.findViewById(R.id.product_price_tv);
childViewHolder.child_cb=convertView.findViewById(R.id.child_cb);
childViewHolder.mMyView = convertView.findViewById(R.id.myview);
convertView.setTag(childViewHolder);
}else {
childViewHolder= (ChildViewHolder) convertView.getTag();
}
childViewHolder.product_title_name_tv.setText(list.get(groupPosition).getList().get(childPosition).getTitle());
childViewHolder.product_price_tv.setText(list.get(groupPosition).getList().get(childPosition).getPrice()+"");
childViewHolder.child_cb.setChecked(list.get(groupPosition).getList().get(childPosition).getSelected()==1);
String images = list.get(groupPosition).getList().get(childPosition).getImages();
String[] split = images.split("\\|");
ImageLoader.getInstance().displayImage(split[0],childViewHolder.product_icon_iv);
childViewHolder.mMyView.setNumber(list.get(groupPosition).getList().get(childPosition).getNum());
childViewHolder.child_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnListChangeListener.onProductCheckedChange(groupPosition,childPosition);
}
});
childViewHolder.mMyView.setOnNumberChanger(new MyView.OnNumberChanger() {
@Override
public void onchang(int number) {
mOnListChangeListener.onProducNumberChange(groupPosition,childPosition,number
);
}
});
return convertView;
}
public static class ChildViewHolder {
public CheckBox child_cb;
public ImageView product_icon_iv;
public TextView product_title_name_tv;
public TextView product_price_tv;
MyView mMyView;
}
@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;
}
}
自定义view
package com.example.lianxi4shop;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* date:2018.11.20
* author:赵颖冰(lenovo)
* function:
*/
public class MyView extends LinearLayout implements View.OnClickListener {
private int number=1;
private TextView sub_tv;
private TextView product_number_tv;
private TextView add_tv;
public MyView(Context context) {
this(context, null);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
View view = inflate(context, R.layout.view_layout, this);
sub_tv = (TextView) findViewById(R.id.sub_tv);
product_number_tv = (TextView) findViewById(R.id.product_number_tv);
add_tv = (TextView) findViewById(R.id.add_tv);
sub_tv.setOnClickListener(this);
add_tv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.sub_tv:
if (number>1){
--number;
product_number_tv.setText(number+"");
if (mOnNumberChanger !=null){
mOnNumberChanger.onchang(number);
}
}else {
Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show();
}
break;
case R.id.add_tv:
++number;
product_number_tv.setText(number+"");
if (mOnNumberChanger !=null){
mOnNumberChanger.onchang(number);
}
break;
}
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
product_number_tv.setText(number+"");
}
public interface OnNumberChanger{
void onchang(int number);
}
private OnNumberChanger mOnNumberChanger;
public void setOnNumberChanger(OnNumberChanger onNumberChanger) {
mOnNumberChanger = onNumberChanger;
}
}