ExpandableListView+自定义view实现linerlayout 实现购物车

本文详细介绍了一个基于ExpandableListView的购物车实现案例,包括初始化视图、全选功能、子项点击事件、网络请求数据更新及总价计算等核心功能。通过自定义适配器和布局,实现了商品分组展示和数量调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity页面的代码
public class MainActivity extends AppCompatActivity implements ExpandView {
private ExpandableListView expandableListView;
private CheckBox checkBox;
private com.example.mk.expandAdapder expandAdapder;
private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ExpandProcenter expandProcenter = new ExpandProcenter(this);
    expandProcenter.Procent("http://120.27.23.105/product/getCarts?source=android&uid=99");
    initView();
}

//获取控件的方法
private void initView() {
expandableListView = findViewById(R.id.ev);
checkBox = findViewById(R.id.checkbox2);
textView = findViewById(R.id.zj);
//设置全选点击的监听
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
isCheckedAll(1);
Tobal();
} else {
isCheckedAll(0);
Tobal();
}
}
});
}
//mvp网络请求成功的方法

@Override
public void isOnSuccess(final List list) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            expandAdapder = new expandAdapder((ArrayList<Exapbean.DataBean>) list, MainActivity.this);
            expandableListView.setAdapter(expandAdapder);
            expandAdapder.setListener(new AddSubLinerLayout.OnLisenter() {
                @Override
                public void isListrner(View view, int num) {
                     Tobal();
                }
            });
            for (int a = 0; a < expandAdapder.getGroupCount(); a++) {
                expandableListView.expandGroup(a);
            }
               initClick();
        }
    });
}

@Override
public void isOnError(String error) {

}

//设置点击全选的方法
public void isCheckedAll(int s) {
int groupCount = expandAdapder.getGroupCount();
for (int i = 0; i < groupCount; i++) {
Exapbean.DataBean listbean = (Exapbean.DataBean) expandAdapder.getGroup(i);
List<Exapbean.DataBean.ListBean> list = listbean.getList();
for (int j = 0; j < list.size(); j++) {
Exapbean.DataBean.ListBean listBean1 = list.get(j);
listBean1.setSelected(s);
}
}
Tobal();
expandAdapder.notifyDataSetChanged();
}

//设计计算总价的方法
public void Tobal() {
double toble = 0;
int groupCount = expandAdapder.getGroupCount();
for (int i = 0; i < groupCount; i++) {
Exapbean.DataBean group = (Exapbean.DataBean) expandAdapder.getGroup(i);
List<Exapbean.DataBean.ListBean> list = group.getList();
for (int j = 0; j < list.size(); j++) {
Exapbean.DataBean.ListBean listBean = list.get(j);
boolean checked = listBean.isChecked();
if (checked) {
String bargainPrice = listBean.getBargainPrice();
double v = Double.parseDouble(bargainPrice);
toble += v * listBean.getNum();
}
}

    }
    textView.setText(toble+"元");
}

//设置子条目点击事件
public void initClick(){
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Exapbean.DataBean.ListBean listBean = (Exapbean.DataBean.ListBean) expandAdapder.getChild(groupPosition, childPosition);
boolean checked = listBean.isChecked();
if (checked){
listBean.setSelected(0);
}else{
listBean.setSelected(1);
}
Tobal();
expandAdapder.notifyDataSetChanged();

            return true;
        }
    });
}
}

//适配器
private ArrayList<Exapbean.DataBean> list;
private Context mCotext;
private AddSubLinerLayout.OnLisenter onLisenter;

public expandAdapder(ArrayList<Exapbean.DataBean> list, Context mCotext) {
    this.list = list;
    this.mCotext = mCotext;
}

@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) {
    ViewHolder_group viewHolder_group = null;
    if (convertView == null) {
        viewHolder_group = new ViewHolder_group();
        convertView = View.inflate(mCotext, R.layout.item_group, null);
        viewHolder_group.checkBox = convertView.findViewById(R.id.checkbox2);
        viewHolder_group.textView = convertView.findViewById(R.id.tv);
        convertView.setTag(viewHolder_group);
    } else {
        viewHolder_group = (ViewHolder_group) convertView.getTag();
    }
    viewHolder_group.textView.setText(list.get(groupPosition).getSellerName());
    //   Exapbean.DataBean dataBean = list.get(groupPosition);
  /*  if (viewHolder_group.checkBox.isChecked()) {
        viewHolder_group.checkBox.setChecked(true);
    } else {
        viewHolder_group.checkBox.setChecked(false);
    }*/
    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    ViewHolder_child viewHolder_child = null;
    if (convertView == null) {
        convertView = View.inflate(mCotext, R.layout.item_chide, null);
        viewHolder_child = new ViewHolder_child();
        viewHolder_child.checkBox1 = convertView.findViewById(R.id.cbx);
        viewHolder_child.textView1 = convertView.findViewById(R.id.tv);
        viewHolder_child.getTextView2 = convertView.findViewById(R.id.tv2);
        viewHolder_child.addSubLinerLayout = convertView.findViewById(R.id.addsub);
        viewHolder_child.imageView = convertView.findViewById(R.id.iv3);
        convertView.setTag(viewHolder_child);
    } else {
        viewHolder_child = (ViewHolder_child) convertView.getTag();
    }
    viewHolder_child.textView1.setText(list.get(groupPosition).getList().get(childPosition).getSubhead());
    viewHolder_child.getTextView2.setText(list.get(groupPosition).getList().get(childPosition).getBargainPrice());

    final Exapbean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
    if (listBean.isChecked()) {
        viewHolder_child.checkBox1.setChecked(true);
    } else {
        viewHolder_child.checkBox1.setChecked(false);
    }
  //viewHolder_child.checkBox1.setOnClickListener();

    viewHolder_child.addSubLinerLayout.setOnLisenter(new AddSubLinerLayout.OnLisenter() {
        @Override
        public void isListrner(View view, int num) {
            listBean.setNum(num);
                 if (onLisenter!=null){
                     onLisenter.isListrner(view,num);
                 }
        }
    });
    String images = listBean.getImages();

    for (int i1 = 0; i1 < images.length(); i1++) {
        int i = images.indexOf("|");
        if (i != -1) {
            String substring = images.substring(0, i);
            Picasso.with(mCotext).load(substring).into(viewHolder_child.imageView);
        } else {
            Picasso.with(mCotext).load(images).into(viewHolder_child.imageView);
        }
    }
    final ViewHolder_child finalViewHolder_child = viewHolder_child;

    return convertView;
}

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

class ViewHolder_group {
    CheckBox checkBox;
    TextView textView;
}

class ViewHolder_child {
    CheckBox checkBox1;
    ImageView imageView;
    TextView textView1;
    TextView getTextView2;
    AddSubLinerLayout addSubLinerLayout;
}

public void setListener(AddSubLinerLayout.OnLisenter onLisenter) {
    this.onLisenter = onLisenter;
}

//自定义linerlayout布局

public class AddSubLinerLayout extends LinearLayout {

private TextView add;
private TextView number;
private TextView sub;

public AddSubLinerLayout(Context context) {
    this(context, null);
}

public AddSubLinerLayout(Context context, AttributeSet attrs) {
    this(context, attrs, -1);
}

public AddSubLinerLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView();
    listener();
}

//获取控件的方法
public void initView() {
View view = View.inflate(getContext(), R.layout.addview, this);
sub = view.findViewById(R.id.sub);
number = view.findViewById(R.id.number);
add = view.findViewById(R.id.add);
number.setText(“1”);
}
public void listener(){
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
add();
}
});
sub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sub();
}
});
}
//减法的监听方法
private void sub() {
String s = number.getText().toString();
int i = Integer.parseInt(s);
if (i<=1){
i–;
onChage(i);
}else{
Toast.makeText(getContext(),“不能再少了,亲”,Toast.LENGTH_SHORT).show();
}
}
//加法的监听的方法
private void add() {
String s = number.getText().toString();
int i = Integer.parseInt(s);
i++;
onChage(i);
}

private OnLisenter onLisenter;

public void setOnLisenter(OnLisenter onLisenter) {
    this.onLisenter = onLisenter;
}
public void onChage(int nums){
    number.setText(""+nums);
    if (onLisenter!=null){
        this.onLisenter.isListrner(this,nums);
    }
}

public interface OnLisenter{
    void isListrner(View view,int num);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值