添加bean中复选框状态值
父控件状态值:
private boolean parentIsSelected;
public boolean isParentIsSelected() {
return parentIsSelected;
}
public void setParentIsSelected(boolean parentIsSelected) {
this.parentIsSelected = parentIsSelected;
}
子控件状态值:
//是否选中的状态
private boolean ChildIsSelect;
public boolean isChildIsSelect() {
return ChildIsSelect;
}
public void setChildIsSelect(boolean childIsSelect) {
ChildIsSelect = childIsSelect;
}
工具类–计算总价
/**
* 工具类---计算总和
*/
public class SumUtils {
public static String sum(List<GoodsBean.DataBean> data){
double sum=0;
for (int i = 0; i < data.size(); i++) {
List<GoodsBean.ChildBean> list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
GoodsBean.ChildBean childBean = list.get(j);
// 如果被选中就累加价钱
if (childBean.isChildIsSelect()){
sum+=childBean.getPrice()*childBean.getNum();
}
}
}
return Double.toString(sum);
}
}
适配器
public class MyAdapter extends BaseExpandableListAdapter {
List<GoodsBean.DataBean> data;
Context context;
IMainView iMainView;
private ViewHolder holder;
private ViewHolder1 holder1;
public MyAdapter(List<GoodsBean.DataBean> data, Context context, IMainView iMainView) {
this.data = data;
this.context = context;
this.iMainView = iMainView;
}
//获取父分组的个数
@Override
public int getGroupCount() {
return data.size();
}
//获取子分组的个数
@Override
public int getChildrenCount(int groupPosition) {
return data.get(groupPosition).getList().size();
}
//获取父分组的对象
@Override
public Object getGroup(int groupPosition) {
return data.get(groupPosition);
}
//获取子分组的对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return data.get(groupPosition).getList().get(childPosition);
}
// //获取父分组的id
@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(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
//优化赋值
if (convertView == null) {
convertView = View.inflate(context, R.layout.layout_parent, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mParentTitle.setText(data.get(groupPosition).getSellerName());
holder.mParentCb.setChecked(data.get(groupPosition).isParentIsSelected());
//商家单选框
holder.mParentCb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean selected = data.get(groupPosition).isParentIsSelected();
selected = !selected;
data.get(groupPosition).setParentIsSelected(selected);
//点击父条目的复选框,子条目,相应的改变
//将复选框的状态赋值给子复选框
List<GoodsBean.ChildBean> list = MyAdapter.this.data.get(groupPosition).getList();
for (int i = 0; i < list.size(); i++) {
GoodsBean.ChildBean childBean = list.get(i);
childBean.setChildIsSelect(selected);
}
notifyDataSetChanged();
}
});
//计算
String sum = SumUtils.sum(data);
iMainView.showCount(sum);
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
//优化赋值
if (convertView == null) {
convertView = View.inflate(context, R.layout.layout_child, null);
holder1 = new ViewHolder1(convertView);
convertView.setTag(holder1);
} else {
holder1 = (ViewHolder1) convertView.getTag();
}
List<GoodsBean.ChildBean> childBeanList = MyAdapter.this.data.get(groupPosition).getList();
holder1.mChildPrice.setText(childBeanList.get(childPosition).getPrice() + "¥");
holder1.mChildTitle.setText(childBeanList.get(childPosition).getTitle());
//图片赋值
String images = childBeanList.get(childPosition).getImages();
String pic_url = images.split("\\|")[0];
Glide.with(context).load(pic_url).into(holder1.mChildPic);
// 单选框状态赋值
holder1.mChildCb.setChecked(data.get(groupPosition).getList().get(childPosition).isChildIsSelect());
// 加减条目赋值
holder1.addSubView.setCount(data.get(groupPosition).getList().get(childPosition).getNum());
holder1.mChildCb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean select = data.get(groupPosition).getList().get(childPosition).isChildIsSelect();
select = !select;
data.get(groupPosition).getList().get(childPosition).setChildIsSelect(select);
//当所有的字条目被选中,父条目也要被选中。如果有一个字条目没有选中,父条目就不能选中
List<GoodsBean.ChildBean> list = MyAdapter.this.data.get(groupPosition).getList();
boolean flag = true;
for (int i = 0; i < list.size(); i++) {
if (!list.get(i).isChildIsSelect()) {
flag = false;
}
}
data.get(groupPosition).setParentIsSelected(flag);
notifyDataSetChanged();
//计算
String sum = SumUtils.sum(data);
iMainView.showCount(sum);
}
});
//减条目
holder1.addSubView.setOnSubClickListener(new AddSubView.SubClickListener() {
@Override
public void onSubClick(View view, int count) {
// 获取子条目中减条目 设置数值
data.get(groupPosition).getList().get(childPosition).setNum(count);
boolean select = data.get(groupPosition).getList().get(childPosition).isChildIsSelect();
// 如果复选框被选中就计算价钱
if (select) {
String sum = SumUtils.sum(data);
iMainView.showCount(sum);
}
}
});
//加条目
holder1.addSubView.setOnAddClickListener(new AddSubView.AddClickListener() {
@Override
public void onAddClick(View view, int count) {
// 获取子条目中加条目 设置数值
data.get(groupPosition).getList().get(childPosition).setNum(count);
boolean select = data.get(groupPosition).getList().get(childPosition).isChildIsSelect();
// 如果复选框被选中就计算价钱
if (select) {
String sum = SumUtils.sum(data);
iMainView.showCount(sum);
}
}
});
return convertView;
}
//子条目可以点击
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
static class ViewHolder {
View view;
CheckBox mParentCb;
TextView mParentTitle;
ViewHolder(View view) {
this.view = view;
this.mParentCb = view.findViewById(R.id.parent_cb);
this.mParentTitle = view.findViewById(R.id.parent_title);
}
}
class ViewHolder1 {
View view;
CheckBox mChildCb;
ImageView mChildPic;
TextView mChildTitle;
TextView mChildPrice;
AddSubView addSubView;
ViewHolder1(View view) {
this.view = view;
this.mChildCb = view.findViewById(R.id.child_cb);
this.mChildPic = view.findViewById(R.id.child_pic);
this.mChildTitle = view.findViewById(R.id.child_title);
this.mChildPrice = view.findViewById(R.id.child_price);
this.addSubView = view.findViewById(R.id.add_sub_view);
}
}
}
主界面main
public class MainActivity extends AppCompatActivity implements IMainView, View.OnClickListener {
List<GoodsBean.DataBean> list;
private ExpandableListView mMyexpandle;
private CheckBox mCbQx;
/**
* 合计:0
*/
private TextView mTvSum;
/**
* 去结算(0)
*/
private Button mJisuan;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
Presenter presenter = new Presenter();
presenter.showShoppingCarToView(new ModleImpl(), this);
}
@Override
public void showGowWuList(List<GoodsBean.DataBean> data) {
list = data;
adapter = new MyAdapter(data, this,this);
mMyexpandle.setAdapter(adapter);
// 打开二级列表
int count = mMyexpandle.getCount();
for (int i = 0; i < count; i++) {
mMyexpandle.expandGroup(i);
}
// 分割线
mMyexpandle.setDivider(getResources().getDrawable(R.drawable.shap_param));
mMyexpandle.setChildDivider(getResources().getDrawable(R.drawable.shap_child));
}
@Override
public void showCount(String count) {
mTvSum.setText("总价:"+count);
}
private void initView() {
mMyexpandle = (ExpandableListView) findViewById(R.id.myexpandle);
mCbQx = (CheckBox) findViewById(R.id.cb_qx_main);
mCbQx.setOnClickListener(this);
mTvSum = (TextView) findViewById(R.id.tv_sum);
mJisuan = (Button) findViewById(R.id.jisuan);
mJisuan.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
// 全选 获取bean中的多选框状态值,赋予状态
case R.id.cb_qx_main:
boolean checked = mCbQx.isChecked();
//只需要改变集合里面的数据,就可以了,然后刷新
for (int i = 0; i < list.size(); i++) {
DataBean dataBean = list.get(i);
dataBean.setParentIsSelected(checked);
//获得子集合,遍历
List<GoodsBean.ChildBean> list1 = dataBean.getList();
for (int j = 0; j < list1.size(); j++) {
list1.get(j).setChildIsSelect(checked);
}
}
//刷新即可
adapter.notifyDataSetChanged();
break;
case R.id.jisuan:
Toast.makeText(this, "去结算------", Toast.LENGTH_SHORT).show();
break;
}
}
}
条目布局
//父布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/parent_cb"
style="@style/Widget.AppCompat.CompoundButton.RadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/parent_title"
android:text="商家"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//子布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<CheckBox
android:id="@+id/child_cb"
style="@style/Widget.AppCompat.CompoundButton.RadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/child_pic"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:singleLine="true"
android:id="@+id/child_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品名"
android:textSize="25sp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:singleLine="true"
android:id="@+id/child_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品价格"
android:textColor="#F00" />
<com.example.dell.myshoppingcar.view.AddSubView
android:id="@+id/add_sub_view"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp">
</com.example.dell.myshoppingcar.view.AddSubView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
自定义加减控件
public class AddSubView extends LinearLayout implements View.OnClickListener {
private TextView sub;
private TextView add;
private EditText count;
private AddClickListener addClickListener;
private SubClickListener subClickListener;
public AddSubView(Context context) {
this(context, null);
}
public AddSubView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public AddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
View view = View.inflate(context, R.layout.add_sub_layout, this);
//获取控件
sub = view.findViewById(R.id.sub);
add = view.findViewById(R.id.add);
count = view.findViewById(R.id.count);
sub.setOnClickListener(this);
add.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sub:
Log.d("AddSubView-----", "点击-号");
// 获取Editext值,如果大于0,就减减数值
String s = count.getText().toString();
int i = Integer.parseInt(s);
if (i <= 0) {
return;
}
count.setText(--i + "");
Log.d("AddSubView-------+--", "-----i:" + i);
subClickListener.onSubClick(v, i);
break;
case R.id.add:
Log.d("AddSubView-----", "点击+号");
// 获取Editext值,如果大于0,就加价数值
String s1 = count.getText().toString();
int i1 = Integer.parseInt(s1);
count.setText(++i1 + "");
Log.d("AddSubView++++++++++", "-----i:" + i1);
addClickListener.onAddClick(v, i1);
break;
}
}
public int getCount() {
return Integer.parseInt(count.getText().toString().trim());
}
public void setCount(int s) {
count.setText(s + "");
}
//内部监听----加数值
public interface AddClickListener {
void onAddClick(View view, int count);
}
//外部调用----加数值
public void setOnAddClickListener(AddClickListener addClickListener) {
this.addClickListener = addClickListener;
}
//内部监听----减数值
public interface SubClickListener {
void onSubClick(View view, int count);
}
//外部调用----减数值
public void setOnSubClickListener(SubClickListener subClickListener) {
this.subClickListener = subClickListener;
}
}
自定义控件布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="30dp"
android:orientation="horizontal">
<TextView
android:id="@+id/sub"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/add_sub_shape"
android:gravity="center"
android:text="-"
android:textSize="25sp" />
<EditText
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/add_sub_shape"
android:focusable="false"
android:gravity="center"
android:text="0" />
<TextView
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/add_sub_shape"
android:gravity="center"
android:text="+"
android:textSize="25sp" />
</LinearLayout>
drawable---- shap
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="100dp"
android:height="30dp" />
<stroke
android:width="1dp"
android:color="#999999" />
</shape>
通用适配器
*BaseAdapter适配器
*
/*
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<Datas>list;
public MyBaseAdapter(Context context, List<Datas> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView ==null){
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.list_item, null);
holder.imageView = (ImageView) convertView.findViewById(R.id.image_show);
holder.tv1 = (TextView) convertView.findViewById(R.id.tv_title);
holder.tv2 = (TextView) convertView.findViewById(R.id.tv_source);
holder.tv3 = (TextView) convertView.findViewById(R.id.tv_number);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.tv1.setText(list.get(position).title);
holder.tv2.setText(list.get(position).source);
holder.tv3.setText(list.get(position).number);
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView tv1,tv2,tv3;
}