二级列表适配器:
package activity.example.com.jindongdemo.Adapter;
import android.content.Context;
import android.util.Log;
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.nostra13.universalimageloader.utils.L;
import java.util.List;
import activity.example.com.jindongdemo.Bean.Child;
import activity.example.com.jindongdemo.Bean.Group;
import activity.example.com.jindongdemo.Fragment.ShoppingFragment;
import activity.example.com.jindongdemo.Header.ShopAddDelete;
import activity.example.com.jindongdemo.InterFaca.OnExpandAdapter;
import activity.example.com.jindongdemo.R;
/**
* Created by 壹颗大金星 on 2017/11/18.
*/
public class ExpandAdapter extends BaseExpandableListAdapter{
private Context context;
private List<Group> data1;
private List<List<Child>> data2;
private OnExpandAdapter all;
private ShoppingFragment s;
public ExpandAdapter(Context context, List<Group> data1, List<List<Child>> data2,OnExpandAdapter all,ShoppingFragment s) {
this.context = context;
this.data1 = data1;
this.data2 = data2;
this.all=all;
this.s=s;
}
@Override
public int getGroupCount() {
return data1.size();
}
@Override
public int getChildrenCount(int i) {
return data2.get(i).size();
}
@Override
public Object getGroup(int i) {
return data1.get(i);
}
@Override
public Object getChild(int i, int i1) {
return data2.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;
}
class ViewHolder{
CheckBox check;
TextView tv;
}
class ViewHolder2{
CheckBox check;
ImageView image;
TextView tv1,tv2;
ShopAddDelete ad;
}
@Override
public View getGroupView(final int i, final boolean b, View view, ViewGroup viewGroup) {
final ViewHolder holder;
if(view==null){
holder = new ViewHolder();
view = View.inflate(context, R.layout.group_item,null);
holder.check = (CheckBox)view.findViewById(R.id.main_check_all);
holder.tv = (TextView)view.findViewById(R.id.textView3);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
holder.tv.setText(data1.get(i).getName());
holder.check.setChecked(data1.get(i).isFlag());
holder.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Group布尔值变成选中状态
data1.get(i).setFlag(holder.check.isChecked());
//遍历Group集合
for (int i = 0; i < data1.size(); i++) {
//如果有一个未选中 全选变成false并跳出
if(!data1.get(i).isFlag()){
all.onSetAll(false);
break;
}else{//全部选中 全选变成true
all.onSetAll(true);
}
}
//Child集合布尔值为选中的状态
for (int j=0;j<data2.get(i).size();j++){
data2.get(i).get(j).setFlag(holder.check.isChecked());
}
//刷新适配器
notifyDataSetChanged();
//调用计算的方法
s.js();
}
});
return view;
}
@Override
public View getChildView(final int i, final int i1, final boolean b, View view, ViewGroup viewGroup) {
final ViewHolder2 holder2;
if(view==null){
holder2 = new ViewHolder2();
view = View.inflate(context, R.layout.child_item,null);
holder2.check = (CheckBox)view.findViewById(R.id.main_check_all);
holder2.image = (ImageView)view.findViewById(R.id.imageView3);
holder2.tv1 = (TextView)view.findViewById(R.id.textView4);
holder2.tv2 = (TextView)view.findViewById(R.id.textView5);
holder2.ad = (ShopAddDelete)view.findViewById(R.id.ad);
view.setTag(holder2);
}else{
holder2 = (ViewHolder2) view.getTag();
}
String images = data2.get(i).get(i1).getImage();
String[] split = images.split("!");
Glide.with(context).load(split[0]).into(holder2.image);
holder2.tv1.setText(data2.get(i).get(i1).getTitle());
holder2.tv2.setText(data2.get(i).get(i1).getPrice()+"");
holder2.ad.count.setText(data2.get(i).get(i1).getNum()+"");
holder2.check.setChecked(data2.get(i).get(i1).isFlag());
holder2.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Child布尔值变成选中状态
data2.get(i).get(i1).setFlag(holder2.check.isChecked());
//遍历Ghild集合
for(int i=0;i<data2.size();i++){
for(int j=0;j<data2.get(i).size();j++){
//如果有一个未选中 全选与商家按钮变成false并跳出
if(!data2.get(i).get(j).isFlag()){
data1.get(i).setFlag(false);
all.onSetAll(false);
break;
}else{//全部选中 全选与商家按钮变成true
data1.get(i).setFlag(true);
all.onSetAll(true);
}
}
}
//二次遍历
for(int i=0;i<data1.size();i++){
boolean flag = data1.get(i).isFlag();
if(flag){
all.onSetAll(true);
}else{
all.onSetAll(false);
break;
}
}
notifyDataSetChanged();
//调用计算的方法
s.js();
}
});
holder2.ad.setOnAddDeleteClick(new ShopAddDelete.OnAddDeleteClickListener() {
@Override
public void onAddClick(View v) {
int number = holder2.ad.getNumber();
number++;
holder2.ad.setNumber(number);
Log.i("TAG",number+"");
data2.get(i).get(i1).setNum(number);
notifyDataSetChanged();
//调用计算的方法
s.js();
}
@Override
public void onDelClick(View v) {
int number = holder2.ad.getNumber();
number--;
if(number>0){
holder2.ad.setNumber(number);
data2.get(i).get(i1).setNum(number);
}
notifyDataSetChanged();
//调用计算的方法
s.js();
}
});
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
}
主页面:
package activity.example.com.jindongdemo.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import activity.example.com.jindongdemo.Adapter.ExpandAdapter;
import activity.example.com.jindongdemo.Bean.Child;
import activity.example.com.jindongdemo.Bean.ExpandBean;
import activity.example.com.jindongdemo.Bean.Group;
import activity.example.com.jindongdemo.InterFaca.Expand;
import activity.example.com.jindongdemo.InterFaca.OnExpandAdapter;
import activity.example.com.jindongdemo.Presenter.ExpandPresenter;
import activity.example.com.jindongdemo.R;
/**
* Created by 壹颗大金星 on 2017/11/6.
*/
public class ShoppingFragment extends Fragment implements Expand,OnExpandAdapter {
private View view;
private ExpandableListView expand_able_view;
public CheckBox main_check_all;
private TextView main_price;
private TextView main_count;
private Button btn_buy;
private ExpandAdapter expandAdapter;
private List<Group> grouplist = new ArrayList<>();
private List<List<Child>> childlist = new ArrayList<>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.shopping_fragment,container,false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//http://120.27.23.105/product/getCarts?uid=100
initView();
expandAdapter = new ExpandAdapter(getActivity(),grouplist,childlist,this,this);
expand_able_view.setAdapter(expandAdapter);
ExpandPresenter expandPresenter = new ExpandPresenter(this,getActivity());
expandPresenter.get("http://120.27.23.105/product/getCarts?uid=100");
main_check_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(int i=0;i<grouplist.size();i++){
grouplist.get(i).setFlag(main_check_all.isChecked());
}
for(int i=0;i<childlist.size();i++){
for(int j=0;j<childlist.get(i).size();j++){
childlist.get(i).get(j).setFlag(main_check_all.isChecked());
}
}
js();
expandAdapter.notifyDataSetChanged();
}
});
}
private void initView() {
expand_able_view = (ExpandableListView)view.findViewById(R.id.expand_able_view);
main_check_all = (CheckBox)view.findViewById(R.id.main_check_all);
main_price = (TextView)view.findViewById(R.id.main_price);
main_count = (TextView)view.findViewById(R.id.main_count);
btn_buy = (Button)view.findViewById(R.id.btn_buy);
}
@Override
public void onSuccess(ExpandBean data) {
List<ExpandBean.DataBean> data2 = data.getData();
for(int i = 0;i<data2.size();i++){
grouplist.add(new Group(data2.get(i).getSellerName(),false));
List<ExpandBean.DataBean.ListBean> list = data2.get(i).getList();
List<Child> cl = new ArrayList<>();
for (int j=0;j<list.size();j++){
cl.add(new Child(false,list.get(j).getTitle(),(float) list.get(j).getPrice(),list.get(j).getImages(),list.get(j).getNum()));
}
childlist.add(cl);
}
for(int s = 0; s < expandAdapter.getGroupCount(); s++){
expand_able_view.expandGroup(s);
}
expandAdapter.notifyDataSetChanged();
}
public void js(){
double p = 0;
int s = 0;
for(int i=0;i<childlist.size();i++){
for(int j=0;j<childlist.get(i).size();j++){
if(childlist.get(i).get(j).isFlag()){
double price = childlist.get(i).get(j).getPrice();
int num = childlist.get(i).get(j).getNum();
p+= price * num;
s++;
}
}
}
DecimalFormat df = new DecimalFormat("######0.00");
main_price.setText("总价:"+df.format(p));
main_count.setText("共"+s+"件商品");
}
@Override
public void onSetAll(boolean b) {
main_check_all.setChecked(b);
}
}
自定义view:
package activity.example.com.jindongdemo.Header;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import activity.example.com.jindongdemo.R;
/**
* Created by 壹颗大金星 on 2017/11/18.
*/
public class ShopAddDelete extends RelativeLayout{
public TextView count;
public ShopAddDelete(Context context) {
this(context,null);
}
public ShopAddDelete(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public ShopAddDelete(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
private OnAddDeleteClickListener listener;
//对外提供一个点击的回调接口
public interface OnAddDeleteClickListener{
void onAddClick(View v);
void onDelClick(View v);
}
public void setOnAddDeleteClick(OnAddDeleteClickListener listener){
this.listener = listener;
}
private void initView(final Context context, AttributeSet attrs, int defStyleAttr) {
View view = View.inflate(context, R.layout.add_delete, this);
ImageView delete = (ImageView)view.findViewById(R.id.delete);
count = (TextView)view.findViewById(R.id.count);
ImageView add = (ImageView)view.findViewById(R.id.add);
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onDelClick(view);
}
});
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onAddClick(view);
}
});
}
//对外提供设置EditText值的方法
public void setNumber(int number){
count.setText(number + "");
}
//得到控件原来的值,并转成int类型
public int getNumber(){
int number = Integer.parseInt(count.getText().toString().trim());
return number;
}
}
一级布局:
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/main_check_all"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="35dp"
android:layout_height="35dp"
app:srcCompat="@drawable/store"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/main_check_all"
android:layout_toEndOf="@+id/main_check_all"
android:layout_marginLeft="14dp"
android:layout_marginStart="14dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="13dp"
android:layout_marginStart="13dp"
android:text="TextView"
android:layout_alignBaseline="@+id/main_check_all"
android:layout_alignBottom="@+id/main_check_all"
android:layout_toRightOf="@+id/imageView2"
android:layout_toEndOf="@+id/imageView2" />
</RelativeLayout>
二级布局:
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/main_check_all"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_below="@+id/textView4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="90dp"
android:layout_height="90dp"
app:srcCompat="@mipmap/ic_launcher"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/main_check_all"
android:layout_toEndOf="@+id/main_check_all" />
<TextView
android:id="@+id/textView4"
android:textSize="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imageView3"
android:layout_toEndOf="@+id/imageView3" />
<TextView
android:id="@+id/textView5"
android:textSize="10dp"
android:textColor="#c91622"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_below="@+id/main_check_all"
android:layout_toRightOf="@+id/imageView3"
android:layout_toEndOf="@+id/imageView3" />
<activity.example.com.jindongdemo.Header.ShopAddDelete
android:id="@+id/ad"
android:layout_width="80dp"
android:layout_height="30dp"
android:layout_alignBottom="@+id/imageView3"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>