public class MainActivity extends AppCompatActivity implements View.OnClickListener, Prasenter.DataView {
private ExpandableListView elsv;
private CheckBox quanxuan;
private Button heji;
Prasenter prasenter;
TextView zongjia;
Myadapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
**initView();
dianjihuidiao();
prasenter.data();
xiabuxiaxin();**
}
**private void xiabuxiaxin() {
int number = myadapter.number();
heji.setText("总计:"+number);
float pricess = myadapter.pricess();
zongjia.setText("总价:"+pricess);
}**
private void dianjihuidiao() {
myadapter.dianjiimp(new Myadapter.Dianji() {
@Override
**public void shangjiadainji(int groupPosition) {
Boolean shangpingquanbuxuanzhong = myadapter.shangpingquanbuxuanzhong(groupPosition);
myadapter.shangjiaquanbuxuanzhong(!shangpingquanbuxuanzhong,groupPosition);
myadapter.notifyDataSetChanged();
xiabuxiaxin();
}**
**@Override
public void shangpindanji(int groupPosition, int childPosition) {
myadapter.zhitiaomuxuanzhong(groupPosition,childPosition);
myadapter.notifyDataSetChanged();
xiabuxiaxin();
}**
**@Override
public void jiajiandianji(int groupPosition, int childPosition, int number) {
myadapter.jiajiandejiangting(groupPosition,childPosition,number);
myadapter.notifyDataSetChanged();
xiabuxiaxin();
}
});**
**quanxuan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Boolean suoyouzhitiaomuxuanzhong = myadapter.suoyouzhitiaomuxuanzhong();
myadapter.waibuquanxuananniuxuanzhong(!suoyouzhitiaomuxuanzhong);
myadapter.notifyDataSetChanged();
xiabuxiaxin();
}
});**
}
**private void initView() {
elsv = (ExpandableListView) findViewById(R.id.elsv);
quanxuan = (CheckBox) findViewById(R.id.quanxuan);
heji = (Button) findViewById(R.id.heji);
zongjia = findViewById(R.id.zongjia);
prasenter = new Prasenter(this);
myadapter = new Myadapter(this);
elsv.setAdapter(myadapter);
heji.setOnClickListener(this);
}**
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.heji:
break;
}
}
@Override
public void cg(List<JsonBean.DataBean> list) {
myadapter.dataString(list);
}
@Override
public void sb() {
Toast.makeText(MainActivity.this,"数据获取失败",Toast.LENGTH_SHORT).show();
}
**@Override
protected void onDestroy() {
super.onDestroy();
prasenter=null;
}
}**
activity布局
自定义控件:
public class MyAddSubView extends LinearLayout implements View.OnClickListener {
**private int number = 1;
private TextView sub_tv;
private TextView product_number_tv;
private TextView add_tv;**
public MyAddSubView(Context context) {
this(context, null);
}
public MyAddSubView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public MyAddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
**View view = inflate(context, R.layout.add_remove_view_layout, this);
sub_tv=view.findViewById(R.id.sub_tv);
product_number_tv=view.findViewById(R.id.product_number_tv);
add_tv=view.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 (onNumberChangeListener != null) {
onNumberChangeListener.onNumberChange(number);
}
} else {
Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show();
}
break;
case R.id.add_tv:
++number;
product_number_tv.setText(number + "");
if (onNumberChangeListener != null) {
onNumberChangeListener.onNumberChange(number);
}
break;
}
}**
**public int getNumber() {
return number;
}**
**public void setNumber(int number) {
this.number = number;
product_number_tv.setText(number + "");
}**
**OnNumberChangeListener onNumberChangeListener;
public void setOnNumberChangeListener(OnNumberChangeListener onNumberChangeListener) {
this.onNumberChangeListener = onNumberChangeListener;
}
interface OnNumberChangeListener {
void onNumberChange(int num);
}**
}
自定义view的布局:
**android:padding="2dp"
android:layout_marginLeft="10dp"
android:layout_width="60dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:background="#99000000"
android:gravity="center_vertical">**
**<TextView
android:background="#ffffff"
android:layout_weight="1"
android:id="@+id/sub_tv"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="-"
android:textSize="16sp" />
<TextView
android:text="1"
android:layout_marginLeft="2dp"
android:background="#ffffff"
android:layout_weight="1"
android:id="@+id/product_number_tv"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
/>
<TextView
android:layout_marginLeft="2dp"
android:background="#ffffff"
android:layout_weight="1"
android:id="@+id/add_tv"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="+"
android:textSize="16sp" />**
商家布局
商品布局:
<liyuanqi.bwie.com.gouwuchelx.MyAddSubView
android:id="@+id/zhuhe"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_marginRight=“10dp” />
adapter中:
class Myadapter extends BaseExpandableListAdapter {
private Context context;
private List<JsonBean.DataBean> mList;
public Myadapter(Context context) {
this.context = context;
mList = new ArrayList<>();
}
public void dataString(List<JsonBean.DataBean> List) {
this.mList = List;
notifyDataSetChanged();
}
@Override
public int getGroupCount() {
return mList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mList.get(groupPosition).getList().size();
}
@Override
public Object getGroup(int groupPosition) {
return mList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mList.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(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
**GroupHolder holder;
if (convertView == null) {
holder = new GroupHolder();
convertView = View.inflate(context, R.layout.shuju1, null);
holder.title1 = convertView.findViewById(R.id.tit1);
holder.groupchick = convertView.findViewById(R.id.fuchick);
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
holder.title1.setText(mList.get(groupPosition).getSellerName());
//判断商家下的所有商品:是否全部选中
Boolean aBoolean = shangpingquanbuxuanzhong(groupPosition);
//根据:(判断商家下的所有商品:是否全部选中)为商家的复选框设置选中或者不选中
holder.groupchick.setChecked(aBoolean);
//商家的点击事件的接口回调
holder.groupchick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDianji.shangjiadainji(groupPosition);
}
});
return convertView;**
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
**ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.shuju2, null);
holder.tit2 = convertView.findViewById(R.id.tit2);
holder.img=convertView.findViewById(R.id.img);
holder.price=convertView.findViewById(R.id.price);
holder.zhuhe=convertView.findViewById(R.id.zhuhe);
holder.zhichick=convertView.findViewById(R.id.zhichick);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ImageLoader.getInstance().displayImage(mList.get(groupPosition).getList().get(childPosition).getImages(),holder.img);
holder.price.setText(mList.get(groupPosition).getList().get(childPosition).getPrice()+"");
holder.tit2.setText(mList.get(groupPosition).getList().get(childPosition).getTitle());
holder.zhuhe.setNumber(mList.get(groupPosition).getList().get(childPosition).getNum());
holder.zhichick.setChecked(mList.get(groupPosition).getList().get(childPosition).getSelected()==1);
//商品的点击事件的接口回调
holder.zhichick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDianji.shangpindanji(groupPosition,childPosition);
}
});
//组合式自定义控件的接口回调:刷新数量值
holder.zhuhe.setOnNumberChangeListener(new MyAddSubView.OnNumberChangeListener() {
@Override
public void onNumberChange(int num) {
mDianji.jiajiandianji(groupPosition,childPosition,num);
}
});
return convertView;
}**
**//所有商品被选中
public Boolean suoyouzhitiaomuxuanzhong(){
for (int j=0;j<mList.size();j++){
List<JsonBean.DataBean.ListBean> list = mList.get(j).getList();
for (int x=0;x<list.size();x++){
if (list.get(x).getSelected()==0){
return false;
}
}
}
return true;
}**
**//全选的复选框是否选中
public void waibuquanxuananniuxuanzhong(boolean isselect){
for (int j=0;j<mList.size();j++){
List<JsonBean.DataBean.ListBean> list = mList.get(j).getList();
for (int x=0;x<list.size();x++){
list.get(x).setSelected(isselect?1:0);
}
}
}**
**//商家下的商品全部选中
public Boolean shangpingquanbuxuanzhong(int groupPosition){
List<JsonBean.DataBean.ListBean> list = mList.get(groupPosition).getList();
for (int x=0;x<list.size();x++){
if (list.get(x).getSelected()==0){
return false;
}
}
return true;
}**
**//商家全部选中
public void shangjiaquanbuxuanzhong(boolean isselect,int groupPosition){
List<JsonBean.DataBean.ListBean> list = mList.get(groupPosition).getList();
for (int x=0;x<list.size();x++){
list.get(x).setSelected(isselect?1:0);
}
}**
**//商品的选中和不选中
public void zhitiaomuxuanzhong(int groupPosition,int childPosition){
JsonBean.DataBean.ListBean listBean = mList.get(groupPosition).getList().get(childPosition);
listBean.setSelected(listBean.getSelected()==0?1:0);
}**
**//更新加减的数量
public void jiajiandejiangting(int groupPosition,int childPosition,int number){
JsonBean.DataBean.ListBean listBean = mList.get(groupPosition).getList().get(childPosition);
listBean.setNum(number);
}**
**//计算商品数量
public int number(){
int nums=0;
for (int j=0;j<mList.size();j++){
List<JsonBean.DataBean.ListBean> list = mList.get(j).getList();
for (int x=0;x<list.size();x++){
if (list.get(x).getSelected()==1){
nums+=list.get(x).getNum();
}
}
}
return nums;
}**
**//计算商品总价
public float pricess(){
float priceX=0;
for (int j=0;j<mList.size();j++){
List<JsonBean.DataBean.ListBean> list = mList.get(j).getList();
for (int x=0;x<list.size();x++){
if (list.get(x).getSelected()==1){
priceX+=list.get(x).getNum()*list.get(x).getPrice();
}
}
}
return priceX;
}**
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
**class GroupHolder {
TextView title1;
CheckBox groupchick;
}
public class ViewHolder {
public CheckBox zhichick;
public ImageView img;
public TextView tit2;
public TextView price;
public MyAddSubView zhuhe;
}**
**public interface Dianji{
//商家的点击事件
void shangjiadainji(int groupPosition);
//商品的点击事件
void shangpindanji(int groupPosition, int childPosition);
//加减的点击事件
void jiajiandianji(int groupPosition,int childPosition,int number);
}
private Dianji mDianji;
public void dianjiimp(Dianji dianji){
mDianji=dianji;
}
}**