主页面代码
mContext = this;
//获取P层
presenter = new ShoppingCartPresenter();
presenter.attachView(this);
presenter.requestData();
//对上下拉的处理
srlContainer.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
presenter.requestData();
refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
}
});
srlContainer.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshlayout) {
refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
}
});
}
@Override
public void showLoading() {
alertDialog = new AlertDialog.Builder(mContext) .setMessage("刷新中").create();
alertDialog.show();
}
@Override
public void hideLoading() {
alertDialog.hide();
}
@Override
public void showData(String mCartString) {
cbAll.setOnCheckedChangeListener(null);
//全选反选的处理
//cbAll.setOnCheckedChangeListener(this);
cbAll.setOnClickListener(this);
//数据解析展示
ShoppingCartBean cartBean = new Gson().fromJson(mCartString, ShoppingCartBean.class);
//外层商家条目的数据源
businessList = cartBean.getData();
//TODO 不建议这样处理,手动移除第一个条目
//设置布局管理器
LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
rvBusiness.setLayoutManager(manager);
//设置适配器
adapter = new BusinessAdapter(R.layout.recycler_business_item, businessList);
rvBusiness.setAdapter(adapter);
全选
@Override
public void onClick(View v) {
//全选逻辑的处理
for (int i = 0; i < businessList.size(); i++) {
//首先让外层的商家条目全部选中
businessList.get(i).setBusinessChecked(cbAll.isChecked());
//然后让里层的商品条目全部选中
for (int j = 0; j < businessList.get(i).getList().size(); j++) {
businessList.get(i).getList().get(j).setGoodsChecked(cbAll.isChecked());
}
}
adapter.notifyDataSetChanged();
//计算总价
calculateTotalCount();
}
适配
package com.android.alex.shoppingcartdemo.ui.adapter;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import java.util.List;
/**
-
@author Alex
-
@date 2019/1/15.
-
GitHub:https://github.com/wangshuaialex
*/
public class BusinessAdapter extends BaseQuickAdapter<ShoppingCartBean.DataBean, BaseViewHolder> {OnBusinessItemClickLisenter onBusinessItemClickLisenter;
public interface OnBusinessItemClickLisenter {
public void onCallBack();
}public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter) {
this.onBusinessItemClickLisenter = onBusinessItemClickLisenter;
}public BusinessAdapter(int layoutResId, @Nullable List<ShoppingCartBean.DataBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean item) {
//设置商家名称
helper.setText(R.id.tv_business_name, item.getSellerName());
//设置商家下的子商品条目
RecyclerView rv_goods = helper.getView(R.id.rv_goods);
//避免焦点抢占
final CheckBox cb_business = helper.getView(R.id.cb_business);
cb_business.setOnCheckedChangeListener(null);
//************************************
//获取商家条目是否选中状态
cb_business.setChecked(item.getBusinessChecked());
//子商品条目数据源
List<ShoppingCartBean.DataBean.ListBean> goodsList = item.getList();
LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
//设置子条目适配器
final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.recycler_goods_item, goodsList);
rv_goods.setLayoutManager(manager);
rv_goods.setAdapter(goodsAdapter);//首先处理内部子条目控制外部条目 二级控制一 goodsAdapter.setOnGoodsItemClickLisenter(new GoodsAdapter.OnGoodsItemClickLisenter() { @Override public void onCallBack() { //遍历获取所有子条目,只要有一个未勾选,商品类别也应该是未勾选 boolean result = true; for (int i = 0; i < item.getList().size(); i++) { result = result & item.getList().get(i).getGoodsChecked(); } cb_business.setChecked(result); //刷新适配器 goodsAdapter.notifyDataSetChanged(); //把最后的状态进行回传 onBusinessItemClickLisenter.onCallBack(); } }); 一级控制二级 //然后外层的商品类别条目需要控制里面的商品条目 cb_business.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取商品类别勾选状态 //外层商品类别条目获取的关键:cb_business.isChecked() for (int i = 0; i < item.getList().size(); i++) { item.getList().get(i).setGoodsChecked(cb_business.isChecked()); } item.setBusinessChecked(cb_business.isChecked()); notifyDataSetChanged(); //把最后的状态进行回传 onBusinessItemClickLisenter.onCallBack(); } });
}
}
二级适配
package com.android.alex.shoppingcartdemo.ui.adapter;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.android.alex.shoppingcartdemo.ui.widget.CalculatorView;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import java.util.List;
/**
-
@author Alex
-
@date 2019/1/15.
-
GitHub:https://github.com/wangshuaialex
*/
public class GoodsAdapter extends BaseQuickAdapter<ShoppingCartBean.DataBean.ListBean, BaseViewHolder> {
OnGoodsItemClickLisenter onGoodsItemClickLisenter;public void setOnGoodsItemClickLisenter(OnGoodsItemClickLisenter onGoodsItemClickLisenter) {
this.onGoodsItemClickLisenter = onGoodsItemClickLisenter;
}//接口回调
public interface OnGoodsItemClickLisenter {
public void onCallBack();
}public GoodsAdapter(int layoutResId, @Nullable List<ShoppingCartBean.DataBean.ListBean> data) {
super(layoutResId, data);
}@Override
protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean.ListBean item) {helper.setText(R.id.tv_goodsPrice, "¥:" + item.getPrice()); helper.setText(R.id.tv_goodsTitle, item.getTitle()); ImageView iv_goodsIcon = helper.getView(R.id.iv_goodsIcon); String imagesString = item.getImages(); String[] imagesStr = imagesString.split("\\|"); Glide.with(mContext).load(imagesStr[0]).into(iv_goodsIcon); //避免焦点抢占 final CheckBox cb_goods = helper.getView(R.id.cb_goods); cb_goods.setOnCheckedChangeListener(null); cb_goods.setChecked(item.getGoodsChecked()); //以接口的方式把状态回传给外层 cb_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //Bean对象状态进行更新完毕 item.setGoodsChecked(isChecked); onGoodsItemClickLisenter.onCallBack(); } }); //加减器 CalculatorView calculatorView = helper.getView(R.id.cv_calculatorView); calculatorView.setOnCalCulatorLisenter(new CalculatorView.OnCalCulatorLisenter() { @Override public void onDecrese(int number) { //对新增的字段进行改动 item.setDefalutNumber(number); onGoodsItemClickLisenter.onCallBack(); } @Override public void onAdd(int number) { //对新增的字段进行改动 item.setDefalutNumber(number); onGoodsItemClickLisenter.onCallBack(); } });
}
}