http://120.27.23.105/product/getCarts?source=android&uid=99
自定义加减器
public class AddSubLayout extends LinearLayout {
private View view;
private TextView jian;
private TextView add;
private TextView num;
public AddSubLayout(Context context) {
this(context,null);
}
public AddSubLayout(Context context, AttributeSet attrs) {
this(context, attrs,-1);
}
public AddSubLayout(Context context,AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
initListener();
}
private void initView(Context context) {
view = View.inflate(context, R.layout.layout_add_sub, this);
jian = view.findViewById(R.id.jian);
add = view.findViewById(R.id.add);
num = view.findViewById(R.id.num);
num.setText("1");
}
private void initListener() {
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
add();
}
});
jian.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
jian();
}
});
}
private void add() {
String string = num.getText().toString();
int number = Integer.parseInt(string);
number++;
setCurentCount(number);
}
private void jian() {
String string = num.getText().toString();
int number = Integer.parseInt(string);
number--;
if(number<=1){
Toast.makeText(getContext(),"不能再少了",Toast.LENGTH_SHORT).show();
return;
}
setCurentCount(number);
}
private void setCurentCount(int number) {
num.setText(number+"");
if (onNumChangedListener!=null){
onNumChangedListener.onNumChanged(this,number);
}
}
private OnNumChangedListener onNumChangedListener;
public void setOnNumChangedListener(OnNumChangedListener onNumChangedListener){
this.onNumChangedListener=onNumChangedListener;
}
public interface OnNumChangedListener{
void onNumChanged(View view,int num);
}
}
public class ShopCarFragment extends Fragment implements ShopCarView {
private ExpandableListView expandableListView;
private CheckBox checkBox;
private TextView sub;
private ShopCarPresent shopCarPresent;
private ExpandListAdapter listAdapter;
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_shop_car, container, false);
expandableListView = view.findViewById(R.id.expandableListView);
checkBox = view.findViewById(R.id.checkBox);
sub = view.findViewById(R.id.sub);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
shopCarPresent = new ShopCarPresent(this);
shopCarPresent.getShop();
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
setCheckAll(1);
}else {
setCheckAll(0);
}
}
});
}
//全选
private void setCheckAll(int i) {
int groupCount = listAdapter.getGroupCount();
for (int j = 0; j < groupCount; j++) {
ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(j);
List<ShopCarBean.DataBean.ListBean> list = group.getList();
for (int k = 0; k < list.size(); k++) {
//list.get(i).setSelected(i);
ShopCarBean.DataBean.ListBean listBean = list.get(k);
listBean.setSelected(i);
}
}
listAdapter.notifyDataSetChanged();
getTotal();//调用计算总价的方法
}
public void getTotal(){
double total=0;
int groupCount = listAdapter.getGroupCount();
for (int i = 0; i < groupCount; i++) {
ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(i);
List<ShopCarBean.DataBean.ListBean> list = group.getList();
for (int j = 0; j < list.size(); j++) {
ShopCarBean.DataBean.ListBean listBean = list.get(j);
boolean checked = listBean.isChecked();
if (checked){
double price = listBean.getPrice();
total+=price*listBean.getNum();
}
}
}
sub.setText("合计:"+total);
}
@Override
public void onSuccess(List<ShopCarBean.DataBean> list) {
listAdapter = new ExpandListAdapter(list,getContext());
expandableListView.setAdapter(listAdapter);
for (int i = 0; i < listAdapter.getGroupCount(); i++) {
expandableListView.expandGroup(i);
}
initListener();
}
private void initListener() {
//点击商品
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(groupPosition);
group.setChecked(!group.isChecked());
int c=0;
if(group.isChecked()){
c=1;
}
List<ShopCarBean.DataBean.ListBean> list = group.getList();
for (int i = 0; i < list.size(); i++) {
ShopCarBean.DataBean.ListBean listBean = list.get(i);
listBean.setSelected(c);
}
listAdapter.notifyDataSetChanged();
getTotal();//调用计算总价的方法
return true;
}
});
//点击商品孩子
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
ShopCarBean.DataBean.ListBean child = (ShopCarBean.DataBean.ListBean) listAdapter.getChild(groupPosition, childPosition);
boolean checked = child.isChecked();
if(checked){
child.setSelected(0);
}else {
child.setSelected(1);
}
listAdapter.notifyDataSetChanged();
getTotal();//调用计算总价的方法
return true;
}
});
//点击商品孩子计算总价
listAdapter.setOnNumChangedListener(new AddSubLayout.OnNumChangedListener() {
@Override
public void onNumChanged(View view, int num) {
getTotal();//调用计算总价的方法
}
});
}
@Override
public void onFailed(String msg) {
}
}
适配器
public class ExpandListAdapter extends BaseExpandableListAdapter {
private List<ShopCarBean.DataBean> list;
private Context context;
private AddSubLayout.OnNumChangedListener onNumChangedListener;
public ExpandListAdapter(List<ShopCarBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getGroupCount() {
return list.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).getList().size();
}
@Override
public Object getGroup(int groupPosition) {
return list.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return list.get(groupPosition).getList().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 true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder=null;
if(convertView==null){
convertView=View.inflate(context, R.layout.list_group_item,null);
groupViewHolder=new GroupViewHolder();
groupViewHolder.checkBox=convertView.findViewById(R.id.shopCheckBox);
groupViewHolder.shopName=convertView.findViewById(R.id.shopName);
convertView.setTag(groupViewHolder);
}else {
groupViewHolder = (GroupViewHolder) convertView.getTag();
}
groupViewHolder.shopName.setText(list.get(groupPosition).getSellerName());
groupViewHolder.checkBox.setChecked(list.get(groupPosition).isChecked());
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder=null;
if(convertView==null){
convertView=View.inflate(context,R.layout.list_child_item,null);
childViewHolder=new ChildViewHolder();
childViewHolder.childCheckBox=convertView.findViewById(R.id.childCheckBox);
childViewHolder.imageView=convertView.findViewById(R.id.imageView);
childViewHolder.childName=convertView.findViewById(R.id.childName);
childViewHolder.addSubLayout=convertView.findViewById(R.id.addSubLayout);
childViewHolder.price=convertView.findViewById(R.id.price);
convertView.setTag(childViewHolder);
}else {
childViewHolder = (ChildViewHolder) convertView.getTag();
}
ShopCarBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
childViewHolder.price.setText(listBean.getPrice()+"");
childViewHolder.childName.setText(listBean.getTitle());
childViewHolder.childCheckBox.setChecked(listBean.isChecked());
String images = listBean.getImages();
String[] split = images.split("\\|");
if(split.length>0){
Picasso.with(context).load(split[0]).into(childViewHolder.imageView);
}
childViewHolder.addSubLayout.setOnNumChangedListener(new AddSubLayout.OnNumChangedListener() {
@Override
public void onNumChanged(View view, int num) {
list.get(groupPosition).getList().get(childPosition).setNum(num);
if (onNumChangedListener!=null){
onNumChangedListener.onNumChanged(view,num);
}
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void setOnNumChangedListener(AddSubLayout.OnNumChangedListener onNumChangedListener){
this.onNumChangedListener=onNumChangedListener;
}
class GroupViewHolder{
CheckBox checkBox;
TextView shopName;
}
class ChildViewHolder{
CheckBox childCheckBox;
ImageView imageView;
TextView childName,price;
AddSubLayout addSubLayout;
}
}
public interface ShopCarCallBack {
void onSuccess(List<ShopCarBean.DataBean> list);
void onFailed(String msg);
}
加减器的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/jian"
android:text="--"
android:padding="10dp"
android:textSize="14sp"
android:textColor="#f00"/>
<TextView
android:id="@+id/num"
android:layout_width="60dp"
android:gravity="center_horizontal"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/add"
android:text="+"
android:padding="10dp"
android:textSize="14sp"
android:textColor="#f00"/>
</LinearLayout>
主页面的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.ShopCarFragment"
android:orientation="vertical">
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="全选"/>
<TextView
android:id="@+id/sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="合计:0.0"
android:layout_marginLeft="10dp"
android:textSize="25sp"/>
<Space
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:textSize="25sp"
android:text="去结算"
android:textColor="#fff"
android:background="#f00"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
商品的布局(组)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<CheckBox
android:id="@+id/shopCheckBox"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/shopName"
android:textSize="25sp"
android:textColor="#f00"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商家"/>
</LinearLayout>
商品子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:layout_marginTop="20dp"
android:id="@+id/childCheckBox"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_gravity="center_horizontal"
android:id="@+id/childName"
android:layout_width="350dp"
android:layout_height="wrap_content"
android:text="name"/>
<TextView
android:layout_marginTop="15dp"
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1234"/>
</LinearLayout>
//引用加减器
<com.bw.fengye.shopcar3.addsub.AddSubLayout
android:id="@+id/addSubLayout"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.bw.fengye.shopcar3.addsub.AddSubLayout>
</LinearLayout>