界面布局
<?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="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="购物车"
android:textColor="@color/black" />
<LinearLayout
android:id="@+id/cart_unlogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/cart_gologin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="登录" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="35dp"
android:text="登录后可查看购物车中的商品" />
</LinearLayout>
<ExpandableListView
android:id="@+id/cart_ex"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null"></ExpandableListView>
</LinearLayout>
<LinearLayout
android:id="@+id/cart_foot"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="7">
<CheckBox
android:text="全选"
android:id="@+id/cart_quanxuan"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:layout_marginLeft="20dp"
android:gravity="center_vertical"
android:text="合计:¥"
android:id="@+id/cart_total"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
<TextView
android:id="@+id/cart_sum"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:background="@color/cheng"
android:gravity="center"
android:text="去结算()"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
代码
public class CartFragment extends Fragment implements CartView {
@BindView(R.id.cart_ex)
ExpandableListView cartEx;
Unbinder unbinder;
@BindView(R.id.cart_unlogin)
LinearLayout cartUnlogin;
@BindView(R.id.cart_quanxuan)
CheckBox cartQuanxuan;
@BindView(R.id.cart_total)
TextView cartTotal;
@BindView(R.id.cart_foot)
LinearLayout cartFoot;
@BindView(R.id.cart_gologin)
TextView cartGologin;
@BindView(R.id.cart_sum)
TextView cartSum;
private SharedPreferences preferences;
private CartPresenter presenter = new CartPresenter(this);
private CartAdapter cartAdapter;
private int uid;
private int islogin;
private List<Cart.DataBean> list = new ArrayList<>();
private int sum;
private float totalPrice;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.cart_fg, null);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// presenter=new CartPresenter(this);
Log.d("aaa", "重新加载了onActivityCreated");
initDialog();
}
private void initDialog() {
}
@Override
public void onGetCartSuccess(Cart cart) {
final List<Cart.DataBean> data = cart.getData();
//***京东未解之谜2.使用请求数据得到的集合不行,会造成页面数据不更新
list.clear();
list.addAll(data);
if (cartAdapter == null) {
cartAdapter = new CartAdapter(list);
cartEx.setAdapter(cartAdapter);
} else {
cartAdapter.notifyDataSetChanged();
}
//购物车接口的实现
//***************************************************************
cartAdapter.setOnCartListener(new CartAdapter.OnCartListener() {
@Override
public void onGroupChecked(int groupPosition) {
boolean allCheckedOnGroup = cartAdapter.isAllCheckedOnGroup(groupPosition);
cartAdapter.setGoodsCheckedOnGroup(groupPosition, !allCheckedOnGroup);
cartAdapter.notifyDataSetChanged();
refreshBottom();
}
@Override
public void onGoodsChecked(int groupPosition, int childPosition) {
cartAdapter.setGoodsChecked(groupPosition, childPosition);
cartAdapter.notifyDataSetChanged();
refreshBottom();
}
@Override
public void onGoodsNumChang(int sellerid, int pid, int num, String selected, int groupPosition, int childPosition) {
cartAdapter.setGoodsNum(groupPosition, childPosition, num);
cartAdapter.notifyDataSetChanged();
refreshBottom();
//联网更新数据
presenter.getUpdateCart(uid + "", sellerid + "", pid + "", selected, num + "");
}
@Override
public void onRemoveGoods(final int groupPosition, final int childPosition, final String pid) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("删除当前商品?");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
cartAdapter.removeGoods(groupPosition, childPosition);
//判断group的长度是否为0
cartAdapter.setGroup(groupPosition);
cartAdapter.notifyDataSetChanged();
refreshBottom();
//联网删除
presenter.deleteCart(uid, Integer.parseInt(pid));
}
});
builder.setNegativeButton("取消", null);
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
});
//************************************************************
//展开所有一级条目
for (int i = 0; i < data.size(); i++) {
cartEx.expandGroup(i);
}
//刷新底部
refreshBottom();
//全选反选,不能使用setOnCheckedChangeListener监听,而要用点击监听
cartQuanxuan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean allGoodsSelected = cartAdapter.isAllGoodsSelected();
cartAdapter.setAllGoodsChecked(!allGoodsSelected);
cartAdapter.notifyDataSetChanged();
//更新ui
refreshBottom();
}
});
}
@Override
public void onGetUpdateCart(UpdateCart updateCart) {
String code = updateCart.getCode();
if (code.equals("0")) {
Toast.makeText(getActivity(), "更新商品数量成功", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDeleteSuccess(DeleteCart deleteCart) {
String code = deleteCart.getCode();
if (code.equals("0")) {
Toast.makeText(getActivity(), "删除商品成功", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
presenter.onDestroy();
presenter = null;
}
@Override
public void onResume() {
super.onResume();
Log.d("aaa", "onResume");
preferences = getActivity().getSharedPreferences("user", 0);
presenter = new CartPresenter(this);
//判断是否已经登录
islogin = preferences.getInt("islogin", 0);
uid = preferences.getInt("uid", 0);
if (islogin == 1) {
cartUnlogin.setVisibility(View.GONE);
cartEx.setVisibility(View.VISIBLE);
cartFoot.setVisibility(View.VISIBLE);
//请求数据,设置二级列表适配器
presenter.getCart(uid + "");
} else {
cartUnlogin.setVisibility(View.VISIBLE);
cartEx.setVisibility(View.GONE);
cartFoot.setVisibility(View.GONE);
}
}
// @OnClick({R.id.cart_gologin, R.id.cart_sum})
// public void onViewClicked() {
// startActivity(new Intent(getActivity(), LoginActivity.class));
// }
//当fragment隐藏状态发生改变时回调
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
//判断是否已经登录
if (!hidden) {
Log.d("aaa", "被show出来了onHiddenChanged");
}
islogin = preferences.getInt("islogin", 0);
uid = preferences.getInt("uid", 0);
if (islogin == 1 && !hidden) {
cartUnlogin.setVisibility(View.GONE);
cartEx.setVisibility(View.VISIBLE);
cartFoot.setVisibility(View.VISIBLE);
//请求数据,设置二级列表适配器
presenter.getCart(uid + "");
} else {
cartUnlogin.setVisibility(View.VISIBLE);
cartEx.setVisibility(View.GONE);
cartFoot.setVisibility(View.GONE);
}
}
// @Override
// public void setUserVisibleHint(boolean isVisibleToUser) {
// super.setUserVisibleHint(isVisibleToUser);
// Log.d("aaa", "setUserVisibleHint");
// if (isVisibleToUser) {
// Log.d("aaa", "对用户可见了isVisibleToUser");
// presenter.getCart(uid + "");
// }
// }
public void refreshBottom() {
//所有商品都选中,将全选按钮选中
boolean allGoodsSelected = cartAdapter.isAllGoodsSelected();
cartQuanxuan.setChecked(allGoodsSelected);
//设置所有选中商品数量
sum = cartAdapter.getSum();
cartSum.setText("去结算(" + cartAdapter.getSum() + ")");
//设置所有选中商品的总价
totalPrice = cartAdapter.getTotalPrice();
cartTotal.setText("合计:¥" + cartAdapter.getTotalPrice());
}
@OnClick({R.id.cart_gologin, R.id.cart_sum})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.cart_gologin:
startActivity(new Intent(getActivity(), LoginActivity.class));
break;
case R.id.cart_sum:
//商品数量大于0才创建订单
int sum = cartAdapter.getSum();
if (sum > 0) {
//使用rxjava过滤数据,选中的数据取出来
EventBus.getDefault().postSticky(new OrderEvent(list, totalPrice));
//用户登录,获得userid,sessionid
userLogin();
// getActivity().startActivity(new Intent(getActivity(), CreateOrderActivity.class));
}
Toast.makeText(getActivity(), "所选商品数量:" + this.sum, Toast.LENGTH_SHORT).show();
break;
}
}
private void userLogin() {
OkHttpClient client = genericClient();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
ApiService apiService = retrofit.create(ApiService.class);
String phone = "13522219872";
String pwd = "123456";
//对称加密
String pssword = AESEncryptUtil.encrypt(pwd);
Log.i("aaa", "对称加密pssword:" + pssword);
Flowable<LoginInfo> flowable = apiService.login(phone, pssword);
flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSubscriber<LoginInfo>() {
@Override
public void onNext(LoginInfo loginInfo) {
LoginInfo.ResultBean result = loginInfo.getResult();
int userId = result.getUserId();
String sessionId = result.getSessionId();
// getActivity().startActivity(new Intent(getActivity(), CreateOrderActivity.class));
Intent intent = new Intent(getActivity(), CreateOrderActivity.class);
//正常是把登录成功后的用户信息保存在SharedPreferences需要的时候取
intent.putExtra("userId", userId);
intent.putExtra("sessionId", sessionId);
getActivity().startActivity(intent);
Log.i("aaa", "登录成功 userId:" + userId + ",登录成功sessionId:" + sessionId);
// Toast.makeText(UserActivity.this, loginInfo.getMessage(), Toast.LENGTH_SHORT).show();
//放在这里纯粹为了拿到 userId,sessionId
// push(token, userId, sessionId);
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
}
//把请求头添加给OkHttpClient的拦截器
public OkHttpClient genericClient() {
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//把Request给Chain
Request request = chain.request()
.newBuilder()
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("ak", "0110010010001")
.build();
return chain.proceed(request);
}
})
.build();
return httpClient;
}
}
mvp-model-CarModel
public class CartModel {
public Observable<Cart> getCart(String uid){
return RetrofitUtil.getDefault().create(MyRetrofit.class).getCart(uid);
}
public Observable<UpdateCart> getUpdateCart(String uid,String sellerid,String pid,String selected,String num){
return RetrofitUtil.getDefault().create(MyRetrofit.class).getUpdateCart(uid,sellerid,pid,selected,num);
}
public Observable<DeleteCart> deleteCart(int uid,int pid){
return RetrofitUtil.getDefault().create(MyRetrofit.class).deleteCart(uid,pid);
}
}
mvp-presenter-CarPresenter
public class CartPresenter extends BasePresenter<CartView> {
private CartModel cartModel;
public CartPresenter(CartView view) {
super(view);
}
@Override
public void initModel() {
cartModel = new CartModel();
}
public void getCart(String uid) {
cartModel.getCart(uid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Cart>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(Cart cart) {
view.onGetCartSuccess(cart);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void getUpdateCart(String uid,String sellerid,String pid,String selected,String num) {
cartModel.getUpdateCart(uid,sellerid,pid,selected,num)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UpdateCart>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(UpdateCart updateCart) {
view.onGetUpdateCart(updateCart);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void deleteCart(int uid,int pid) {
cartModel.deleteCart(uid,pid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<DeleteCart>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(DeleteCart deleteCart) {
view.onDeleteSuccess(deleteCart);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
mvp-view-CarView
public interface CartView extends IView {
void onGetCartSuccess(Cart cart);
void onGetUpdateCart(UpdateCart updateCart);
void onDeleteSuccess(DeleteCart deleteCart);
}
CarAdapter
public class CartAdapter extends BaseExpandableListAdapter {
private List<Cart.DataBean> list;
private CheckBox seller_check;
private CheckBox goods_check;
private Cart.DataBean.ListBean bean;
private Context context;
public CartAdapter(List<Cart.DataBean> list) {
this.list = list;
}
@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(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
context = parent.getContext();
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.seller_item, null);
}
TextView seller_name = convertView.findViewById(R.id.seller_name);
seller_check = convertView.findViewById(R.id.seller_check);
//************************************group点击监听
seller_check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onCartListener != null) {
onCartListener.onGroupChecked(groupPosition);
}
}
});
//如果当前group中的所有商品都被选中,那就把group选中
boolean selectedOnGroup = isSelectedOnGroup(groupPosition);
seller_check.setChecked(selectedOnGroup);
seller_name.setText(list.get(groupPosition).getSellerName());
return convertView;
}
private boolean isSelectedOnGroup(int groupPosition) {
List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList();
for (Cart.DataBean.ListBean bean : list) {
if (bean.getSelected() == 0) {
return false;
}
}
return true;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.goods_item, null);
}
bean = list.get(groupPosition).getList().get(childPosition);
SimpleDraweeView goods_img = convertView.findViewById(R.id.goods_img);
TextView goods_title = convertView.findViewById(R.id.goods_title);
TextView goods_price = convertView.findViewById(R.id.goods_price);
goods_check = convertView.findViewById(R.id.goods_check);
//处理imgurl
String imgUrl = getImgUrl(bean.getImages());
goods_img.setImageURI(Uri.parse(imgUrl));
goods_title.setText(bean.getTitle());
goods_price.setText("¥"+bean.getBargainPrice());
//根据集合数据设置复选框选中状态
goods_check.setChecked(bean.getSelected() == 1);
//************************************
goods_check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onCartListener != null) {
onCartListener.onGoodsChecked(groupPosition, childPosition);
}
}
});
//设置加减器监听
AddDeleteView goods_ad = convertView.findViewById(R.id.goods_ad);
goods_ad.setOnAddDeleteViewClick(new AddDeleteView.OnAddDeleteViewClick() {
@Override
public void onNumChange(int num) {
if (onCartListener != null) {
Cart.DataBean.ListBean bean = list.get(groupPosition).getList().get(childPosition);
onCartListener.onGoodsNumChang(bean.getSellerid(), bean.getPid(), num,bean.getSelected()+"", groupPosition, childPosition);
}
}
});
//长按删除当前条目
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Cart.DataBean.ListBean bean = CartAdapter.this.list.get(groupPosition).getList().get(childPosition);
if (onCartListener!=null){
onCartListener.onRemoveGoods(groupPosition,childPosition,bean.getPid()+"");
}
return true;
}
});
goods_ad.setSum(bean.getNum());
return convertView;
}
private String getImgUrl(String images) {
int i = images.indexOf("!");
return images.substring(0, i);
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
//计算总数
public int getSum() {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
if (list.get(i).getList().get(j).getSelected() == 1) {
int num = list.get(i).getList().get(j).getNum();
sum += num;
}
}
}
return sum;
}
//结算总价
public float getTotalPrice() {
int sum = 0;
float price = 0f;
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
if (list.get(i).getList().get(j).getSelected() == 1) {
int num = list.get(i).getList().get(j).getNum();
double bargainPrice = list.get(i).getList().get(j).getBargainPrice();
price += (float) (num * bargainPrice);
}
}
}
return price;
}
//判断所有商品是都都被选中
public boolean isAllGoodsSelected() {
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
if (list.get(i).getList().get(j).getSelected() == 0) {
//如果有一个没选中返回false
return false;
}
}
}
return true;
}
//改变单个group中所有商品的选中状态
public void setGoodsCheckedOnGroup(int groupPosition, boolean groupChecked) {
List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList();
for (Cart.DataBean.ListBean listBean : list) {
listBean.setSelected(groupChecked ? 1 : 0);
}
}
//判断单个group中所有商品是否都被选中
public boolean isAllCheckedOnGroup(int groupPosition) {
List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList();
for (Cart.DataBean.ListBean listBean : list) {
if (listBean.getSelected() == 0) {
return false;
}
}
return true;
}
//改变集合中所有商品的状态
public void setAllGoodsChecked(boolean check) {
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(i).getList().size(); j++) {
list.get(i).getList().get(j).setSelected(check ? 1 : 0);
}
}
}
//改变某个商品的状态
public void setGoodsChecked(int groupPosition, int childPosition) {
//***京东未解之谜1.复用bean会造成复选框取消不了
// list.get(groupPosition).getList().get(childPosition).setSelected(bean.getSelected() == 0 ? 1 : 0);
Cart.DataBean.ListBean bean = list.get(groupPosition).getList().get(childPosition);
bean.setSelected(bean.getSelected() == 0 ? 1 : 0);
}
//修改某个商品的数量
public void setGoodsNum(int groupPosition, int childPosition, int num) {
list.get(groupPosition).getList().get(childPosition).setNum(num);
}
//从集合删除某个商品
public void removeGoods( int groupPosition, int childPosition){
list.get(groupPosition).getList().remove(childPosition);
}
//判断某个group长度是否为0
public void setGroup(int groupPosition){
List<Cart.DataBean.ListBean> listBeans =list.get(groupPosition).getList();
if(listBeans.size()==0){
list.remove(groupPosition);
}
}
public interface OnCartListener {
void onGroupChecked(int groupPosition);
void onGoodsChecked(int groupPosition, int childPosition);
void onGoodsNumChang(int sellerid, int pid, int num,String selected, int groupPosition, int childPosition);
void onRemoveGoods(int groupPosition, int childPosition,String pid);
}
private OnCartListener onCartListener;
public void setOnCartListener(OnCartListener onCartListener) {
this.onCartListener = onCartListener;
}
}
自定义加减器的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:gravity="center"
android:textSize="30dp"
android:text="-"
android:id="@+id/delete"
android:layout_width="40dp"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:textSize="30dp"
android:text="0"
android:id="@+id/num"
android:layout_width="60dp"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:textSize="30dp"
android:text="+"
android:id="@+id/add"
android:layout_width="40dp"
android:layout_height="wrap_content" />
</LinearLayout>
自定义加减器
public class AddDeleteView extends LinearLayout {
private int sum = 0;
private TextView delete;
private TextView num;
private TextView add;
public AddDeleteView(Context context) {
this(context, null, 0);
}
public AddDeleteView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public AddDeleteView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.adddeleteview, this);
add = findViewById(R.id.add);
delete = findViewById(R.id.delete);
num = findViewById(R.id.num);
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sum++;
num.setText(sum + "");
if (onAddDeleteViewClick != null) {
onAddDeleteViewClick.onNumChange(sum);
}
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (sum > 1) {
sum--;
num.setText(sum + "");
if (onAddDeleteViewClick != null) {
onAddDeleteViewClick.onNumChange(sum);
}
}
}
});
}
public void setSum(int sum) {
this.sum = sum;
num.setText(sum + "");
}
public interface OnAddDeleteViewClick {
void onNumChange(int num);
}
private OnAddDeleteViewClick onAddDeleteViewClick;
public void setOnAddDeleteViewClick(OnAddDeleteViewClick onAddDeleteViewClick) {
this.onAddDeleteViewClick = onAddDeleteViewClick;
}
}