1 MainLayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--标题栏-->
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
android:layout_height="48dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="购物车" />
<TextView
android:id="@+id/txt_edit_or_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:padding="5dp"
android:text="编辑" />
</RelativeLayout>
<!--底部结算-->
<RelativeLayout
android:id="@+id/rl_bottom"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_alignParentBottom="true">
<CheckBox
android:id="@+id/cb_total_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="全选" />
<TextView
android:id="@+id/txt_total_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/cb_total_select"
android:textColor="#c23636" />
<Button
android:id="@+id/btn_calu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="结算" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_shopper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/rl_bottom"
android:layout_below="@id/rl_title"></android.support.v7.widget.RecyclerView>
</RelativeLayout>
2 shopperLayout
<?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="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:padding="5dp">
<CheckBox
android:id="@+id/cb_shopper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@null" />
<TextView
android:id="@+id/txt_shopper_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_product"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
3 productLayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingLeft="20dp"
android:paddingRight="5dp"
android:paddingTop="5dp">
<CheckBox
android:id="@+id/cb_product"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@null" />
<ImageView
android:id="@+id/img_product"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/cb_product" />
<com.bwie.cart1023.widget.AddDecreaseView
android:id="@+id/adv_product"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"></com.bwie.cart1023.widget.AddDecreaseView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/adv_product"
android:layout_toRightOf="@id/img_product"
android:orientation="vertical">
<TextView
android:id="@+id/txt_product_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp" />
<TextView
android:id="@+id/txt_single_price"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
4. addLayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="70dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txt_decrease"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#e78b8b"
android:padding="5dp"
android:text=" - " />
<TextView
android:id="@+id/txt_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="#e78b8b"
android:padding="5dp"
android:text=" + " />
<TextView
android:id="@+id/txt_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/txt_add"
android:layout_toRightOf="@id/txt_decrease"
android:gravity="center"
android:maxLength="3" />
</RelativeLayout>
5 MianActivity
package com.bwie.cart1023;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import com.bwie.cart1023.adapter.ProductAdapter;
import com.bwie.cart1023.adapter.ShopperAdapter;
import com.bwie.cart1023.bean.MessageBean;
import com.bwie.cart1023.bean.Product;
import com.bwie.cart1023.bean.Shopper;
import com.bwie.cart1023.cart.presenter.CartPresenter;
import com.bwie.cart1023.cart.view.IView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements IView {
private static final String TAG = "MainActivity";
// MessageBean<List<ShopperAdapter<List<Product>>>>
private TextView txtEditFinish;
private CheckBox cbTotal;
private TextView txtPrice;
private Button btnCalu;
private RecyclerView rvShoper;
private CartPresenter presenter;
private ShopperAdapter adapter;
private List<Shopper<List<Product>>> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
setListener();
}
private void setListener() {
// cbTotal.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// // 遍历一级列表,和下方的全选状态一致
// for (Shopper<List<Product>> listShopper : list) {
// listShopper.setChecked(isChecked);
// // 遍历二级列表,和下方的全选状态一致
// List<Product> products = listShopper.getList();
// for (Product product : products) {
// product.setChecked(isChecked);
// }
// }
// adapter.notifyDataSetChanged();
// }
// });
cbTotal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = cbTotal.isChecked();
// 遍历一级列表,和下方的全选状态一致
for (Shopper<List<Product>> listShopper : list) {
listShopper.setChecked(isChecked);
// 遍历二级列表,和下方的全选状态一致
List<Product> products = listShopper.getList();
for (Product product : products) {
product.setChecked(isChecked);
}
}
adapter.notifyDataSetChanged();
}
});
}
private void initData() {
list = new ArrayList<>();
// 商家的列表
adapter = new ShopperAdapter(this, list);
// 添加一级条目(商家)状态发生变化时
adapter.setOnShopperClickListener(new ShopperAdapter.OnShopperClickListener() {
@Override
public void onShopperClick(int position, boolean isCheck) {
// 为了效率考虑,当点击状态变成未选中时,全选按钮肯定就不是全选了,就不用再循环一次
if (!isCheck) {
cbTotal.setChecked(false);
} else {
// 如果是商家变成选中状态时,需要循环遍历所有的商家是否被选中
// 循环遍历之前先设置一个true标志位,只要有一个是未选中就改变这个标志位为false
boolean isAllShopperChecked = true;
for (Shopper<List<Product>> listShopper : list) {
// 只要有一个商家没有被选中,全选复选框就变成未选中状态,并且结束循环
if (!listShopper.isChecked()) {
isAllShopperChecked = false;
break;
}
}
cbTotal.setChecked(isAllShopperChecked);
}
// 一级条目发生变化时,计算一下总价
calculatePrice();
}
});
adapter.setOnAddDecreaseProductListener(new ProductAdapter.OnAddDecreaseProductListener() {
@Override
public void onChange(int position, int num) {
calculatePrice();
}
});
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
rvShoper.setLayoutManager(layoutManager);
rvShoper.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
rvShoper.setAdapter(adapter);
presenter = new CartPresenter();
presenter.attach(this);
presenter.getData();
}
// 计算商品总价
private void calculatePrice() {
// 遍历商家
float totalPrice = 0;
for (Shopper<List<Product>> listShopper : list) {
// 遍历商家的商品
List<Product> list = listShopper.getList();
for (Product product : list) {
// 如果商品被选中
if (product.isChecked()) {
totalPrice += product.getNum() * product.getPrice();
}
}
}
txtPrice.setText("总价:" + totalPrice);
}
private void initView() {
txtEditFinish = findViewById(R.id.txt_edit_or_finish);
cbTotal = findViewById(R.id.cb_total_select);
txtPrice = findViewById(R.id.txt_total_price);
btnCalu = findViewById(R.id.btn_calu);
rvShoper = findViewById(R.id.rv_shopper);
}
@Override
public void success(MessageBean<List<Shopper<List<Product>>>> data) {
if (data != null) {
// 获取商家列表
List<Shopper<List<Product>>> shoppers = data.getData();
if (shoppers != null) {
list.clear();
list.addAll(shoppers);
adapter.notifyDataSetChanged();
}
}
}
@Override
public void failed(Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
presenter.detach();
}
}
}
6 MVP V:
public interface IView {
void success(MessageBean<List<Shopper<List<Product>>>> data);
void failed(Exception e);
}
7 M:
public class CartModel {
public void getData(String url, INetCallBack callBack, Type type) {
HttpUtils.getInstance().get(url, callBack, type);
}
}
8. P:
package com.bwie.cart1023.cart.presenter;
import com.bwie.cart1023.bean.MessageBean;
import com.bwie.cart1023.bean.Product;
import com.bwie.cart1023.bean.Shopper;
import com.bwie.cart1023.cart.model.CartModel;
import com.bwie.cart1023.cart.view.IView;
import com.bwie.cart1023.inter.INetCallBack;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
/**
*
*/
public class CartPresenter {
private IView iv;
private CartModel model;
public void attach(IView iv) {
this.iv = iv;
model = new CartModel();
}
public void getData() {
String url = "http://www.zhaoapi.cn/product/getCarts?uid=1538";
Type type = new TypeToken<MessageBean<List<Shopper<List<Product>>>>>() {
}.getType();
model.getData(url, new INetCallBack() {
@Override
public void success(Object obj) {
MessageBean<List<Shopper<List<Product>>>> data = (MessageBean<List<Shopper<List<Product>>>>) obj;
iv.success(data);
}
@Override
public void failed(Exception e) {
iv.failed(e);
}
}, type);
}
public void detach() {
if (iv != null) {
iv = null;
}
}
}
9 ShopperAdapter
package com.bwie.cart1023.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.bwie.cart1023.R;
import com.bwie.cart1023.bean.Product;
import com.bwie.cart1023.bean.Shopper;
import java.util.List;
/**
*
*/
public class ShopperAdapter extends RecyclerView.Adapter<ShopperAdapter.ViewHolder> {
private Context context;
private List<Shopper<List<Product>>> list;
public ShopperAdapter(Context context, List<Shopper<List<Product>>> list) {
this.context = context;
this.list = list;
}
// 一级列表(商家)发生变化的接口
public interface OnShopperClickListener {
void onShopperClick(int position, boolean isCheck);
}
private OnShopperClickListener shopperClickListener;
public void setOnShopperClickListener(OnShopperClickListener listener) {
this.shopperClickListener = listener;
}
// 二级列表的加减器监听
private ProductAdapter.OnAddDecreaseProductListener productListener;
public void setOnAddDecreaseProductListener(ProductAdapter.OnAddDecreaseProductListener listener) {
this.productListener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = View.inflate(context, R.layout.item_shopper, null);
ViewHolder holder = new ViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
final Shopper<List<Product>> shopper = list.get(position);
holder.txtShopperName.setText(shopper.getSellerName());
// 产品的列表
RecyclerView.LayoutManager pLayoutManager = new LinearLayoutManager(context);
holder.rvProduct.setLayoutManager(pLayoutManager);
final ProductAdapter adapter = new ProductAdapter(context, shopper.getList());
// 给二级列表添加一个加减器的监听
if (productListener != null) {
adapter.setOnAddDecreaseProductListener(productListener);
}
// 二级条目(商品)复选框点击事件
adapter.setOnProductClickListener(new ProductAdapter.OnProductClickListener() {
@Override
public void onProductClick(int position, boolean isChecked) {
// 当前商品未选中,商家也就未选中
if (!isChecked) {
shopper.setChecked(false);
// 只要是当前条目未选中,全选复选框也就没选中
shopperClickListener.onShopperClick(position, false);
} else {
// 当前商品如果选中,需要遍历商家所有的商品是否选中
// 循环遍历之前先设置一个true标志位,只要有一条商品没有被选中,商家也就选中,标志位变成false
boolean isAllProductSelected = true;
for (Product product : shopper.getList()) {
if (!product.isChecked()) {
isAllProductSelected = false;
break;
}
}
shopper.setChecked(isAllProductSelected);
// 当前商品选中时,需要循环遍历所有的商家是否被选中来确认外部全选复选框的状态
shopperClickListener.onShopperClick(position, true);
}
// 数据发生变化之后刷新适配器
notifyDataSetChanged();
productListener.onChange(0, 0);
}
});
holder.rvProduct.setAdapter(adapter);
// 先取消掉之前的点击变化监听
holder.cbSHopper.setOnCheckedChangeListener(null);
// 设置好初始化的状态
holder.cbSHopper.setChecked(shopper.isChecked());
// 等设置完初始化状态之后再设置我们自己的监听
// 商家列表中的复选框
holder.cbSHopper.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
shopper.setChecked(isChecked);
// 1.商家被选中的时候,子类所有的商品应该被选中
// if (isChecked) {
List<Product> productList = shopper.getList();
for (Product product : productList) {
product.setChecked(isChecked);
}
// 子类商品的适配器刷新
adapter.notifyDataSetChanged();
// }
// 当点击一级条目的时候,外部的全选按钮状态发生变化
if (shopperClickListener != null) {
shopperClickListener.onShopperClick(position, isChecked);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private CheckBox cbSHopper;
private TextView txtShopperName;
private RecyclerView rvProduct;
public ViewHolder(View itemView) {
super(itemView);
cbSHopper = itemView.findViewById(R.id.cb_shopper);
txtShopperName = itemView.findViewById(R.id.txt_shopper_name);
rvProduct = itemView.findViewById(R.id.rv_product);
}
}
}
10 Product Adapter
package com.bwie.cart1023.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bwie.cart1023.R;
import com.bwie.cart1023.bean.Product;
import com.bwie.cart1023.utils.StringUtils;
import com.bwie.cart1023.widget.AddDecreaseView;
import java.util.List;
/**
*
*/
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder> {
private Context context;
private List<Product> list;
// 二级条目(商品)点击监听
public interface OnProductClickListener {
void onProductClick(int position, boolean isChecked);
}
private OnProductClickListener productClickListener;
public void setOnProductClickListener(OnProductClickListener listener) {
this.productClickListener = listener;
}
// 加减器发生变化的监听
public interface OnAddDecreaseProductListener {
void onChange(int position, int num);
}
private OnAddDecreaseProductListener productListener;
public void setOnAddDecreaseProductListener(OnAddDecreaseProductListener listener) {
this.productListener = listener;
}
public ProductAdapter(Context context, List<Product> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = View.inflate(context, R.layout.item_product, null);
ViewHolder holder = new ViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
final Product product = list.get(position);
String images = product.getImages();
// 商品图片
if (!TextUtils.isEmpty(images)) {
String[] strings = images.split("\\|");
if (strings.length > 0) {
Glide.with(context)
.load(StringUtils.https2Http(strings[0]))
.into(holder.imgProduct);
}
}
holder.txtProductName.setText(product.getTitle());
holder.txtSinglePriice.setText(String.valueOf(product.getPrice()));
holder.advProduct.setNum(product.getNum());
// 加减器添加点击事件
holder.advProduct.setOnAddDecreaseClickListener(new AddDecreaseView.OnAddDecreaseClickListener() {
@Override
public void add(int num) {
product.setNum(num);
if (productListener != null) {
productListener.onChange(position, num);
}
}
@Override
public void decrease(int num) {
product.setNum(num);
if (productListener != null) {
productListener.onChange(position, num);
}
}
});
// 商品的复选框
holder.cbProduct.setOnCheckedChangeListener(null);
holder.cbProduct.setChecked(product.isChecked());
holder.cbProduct.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
product.setChecked(isChecked);
if (productClickListener != null) {
productClickListener.onProductClick(position, isChecked);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private CheckBox cbProduct;
private ImageView imgProduct;
private TextView txtProductName;
private TextView txtSinglePriice;
private AddDecreaseView advProduct;
public ViewHolder(View itemView) {
super(itemView);
cbProduct = itemView.findViewById(R.id.cb_product);
imgProduct = itemView.findViewById(R.id.img_product);
txtSinglePriice = itemView.findViewById(R.id.txt_single_price);
advProduct = itemView.findViewById(R.id.adv_product);
txtProductName = itemView.findViewById(R.id.txt_product_name);
}
}
}
11.bean
11.1MessageBean
public class MessageBean<T> {
private String msg;
private String code;
private T data;
//添加get,set方法
11.2 Shopper
public class Shopper<T> {
private String sellerid;
private String sellerName;
private boolean isChecked;
private T list;
11.3 product
package com.bwie.cart1023.bean;
/**
* Created by eric on 2018/10/23.
*/
public class Product {
/**
* bargainPrice : 22.9
* createtime : 2017-10-14T21:48:08
* detailUrl : https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends
* images : https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg
* num : 1
* pid : 24
* price : 288
* pscid : 2
* selected : 0
* sellerid : 1
* subhead : 三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》
* title : 三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋
*/
private float bargainPrice;
private String createtime;
private String detailUrl;
private String images;
private int num;
private int pid;
private float price;
private int pscid;
private int selected;
private int sellerid;
private String subhead;
private String title;
private boolean isChecked;
public float getBargainPrice() {
return bargainPrice;
}
public void setBargainPrice(float bargainPrice) {
this.bargainPrice = bargainPrice;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getDetailUrl() {
return detailUrl;
}
public void setDetailUrl(String detailUrl) {
this.detailUrl = detailUrl;
}
public String getImages() {
return images;
}
public void setImages(String images) {
this.images = images;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public int getPscid() {
return pscid;
}
public void setPscid(int pscid) {
this.pscid = pscid;
}
public int getSelected() {
return selected;
}
public void setSelected(int selected) {
this.selected = selected;
}
public int getSellerid() {
return sellerid;
}
public void setSellerid(int sellerid) {
this.sellerid = sellerid;
}
public String getSubhead() {
return subhead;
}
public void setSubhead(String subhead) {
this.subhead = subhead;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
12 AddDecreaseView
package com.bwie.cart1023.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bwie.cart1023.R;
/**
*
*/
public class AddDecreaseView extends RelativeLayout implements View.OnClickListener {
private TextView txtAdd;
private TextView txtDecrease;
private TextView txtNum;
private int num;
public interface OnAddDecreaseClickListener {
void add(int num);
void decrease(int num);
}
private OnAddDecreaseClickListener listener;
public void setOnAddDecreaseClickListener(OnAddDecreaseClickListener listener) {
this.listener = listener;
}
public AddDecreaseView(Context context) {
this(context, null);
}
public AddDecreaseView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AddDecreaseView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
View.inflate(context, R.layout.item_add_decrease, this);
txtAdd = findViewById(R.id.txt_add);
txtDecrease = findViewById(R.id.txt_decrease);
txtNum = findViewById(R.id.txt_num);
txtNum.setText("1");
txtAdd.setOnClickListener(this);
txtDecrease.setOnClickListener(this);
}
public void setNum(int num) {
this.num = num;
txtNum.setText(num + "");
}
public int getNum() {
return num;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.txt_add:
num++;
txtNum.setText(num + "");
if (listener != null) {
listener.add(num);
}
break;
case R.id.txt_decrease:
if (num > 1) {
num--;
}
txtNum.setText(num + "");
if (listener != null) {
listener.decrease(num);
}
break;
}
}
}