//我们需要在已经写好的二级列表基础上写如多选框和计算器
//主页面中
public class MainActivity extends AppCompatActivity implements ShopConstant.ShopView {
private ShopConstant.ShopPresenter presenterImpi;
private RecyclerView recycle;
private CheckBox all;
private BusinessAdapter adapter;
private List<JsonBean.DataBean> dataBeanList;
private TextView count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
count = (TextView) findViewById(R.id.text_count);
all = (CheckBox) findViewById(R.id.checkboxall);
recycle = (RecyclerView) findViewById(R.id.recycle);
presenterImpi = new ShopPresenterImpi();
presenterImpi.attachView(this);
presenterImpi.requestData();
}
@Override
public void showData(final List<JsonBean.DataBean> data) {
all.setOnCheckedChangeListener(null);
all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i=0;i<dataBeanList.size();i++){
dataBeanList.get(i).setBusinessChecked(all.isChecked());
for (int j=0;j<dataBeanList.get(i).getList().size();j++){
dataBeanList.get(i).getList().get(j).setGoodsChecked(all.isChecked());
}
}
adapter.notifyDataSetChanged();
//计算总价
CalculatortotalCount();
}
});
dataBeanList = new ArrayList<JsonBean.DataBean>();
dataBeanList.addAll(data);
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
recycle.setLayoutManager(manager);
adapter = new BusinessAdapter(R.layout.business_item, dataBeanList);
recycle.setAdapter(adapter);
adapter.setOnBusinessItemClickLisenter(new BusinessAdapter.OnBusinessItemClickLisenter() {
@Override
public void onCallBack() {
boolean result=true;
for (int i=0;i<dataBeanList.size();i++){
boolean businessChecked = dataBeanList.get(i).getBusinessChecked();
result=result&businessChecked;
for (int j=0;j<dataBeanList.get(i).getList().size();j++){
boolean goodsChecked = dataBeanList.get(i).getList().get(j).getGoodsChecked();
result=result & goodsChecked;
}
}
all.setChecked(result);
//计算总价
CalculatortotalCount();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
presenterImpi.detachView(this);
}
//计算总价
private void CalculatortotalCount(){
double totalCount=0;
//外层条目
for (int i = 0; i < dataBeanList.size(); i++) {
//内层条目
for (int j = 0; j < dataBeanList.get(i).getList().size(); j++) {
//判断内层条目是否勾选
if (dataBeanList.get(i).getList().get(j).getGoodsChecked() == true){
//获取商品数据*商品价格
double price = dataBeanList.get(i).getList().get(j).getPrice();
int defalutNumber = dataBeanList.get(i).getList().get(j).getDefaultNumber();
double goodsPrice = price * defalutNumber;
totalCount = totalCount+goodsPrice;
}
}
}
//赋值
count.setText("总价是:"+String.valueOf(totalCount));
}
}
//在商家adapter中
public class BusinessAdapter extends BaseQuickAdapter<JsonBean.DataBean,BaseViewHolder> {
OnBusinessItemClickLisenter onBusinessItemClickLisenter;
private RecyclerView recycle_goods;
//设置接口回调
public interface OnBusinessItemClickLisenter{
public void onCallBack();
}
public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter){
this.onBusinessItemClickLisenter=onBusinessItemClickLisenter;
}
public BusinessAdapter(int layoutResId, @Nullable List<JsonBean.DataBean> dataBeanList) {
super(layoutResId, dataBeanList);
}
@Override
protected void convert(BaseViewHolder helper, final JsonBean.DataBean item) {
//设置商家名称
helper.setText(R.id.business_name,item.getSellerName());
//获取多选框的id(全选必须findbyid)
final CheckBox business_checkbox = helper.getView(R.id.business_checkbox);
//避免焦点抢占
business_checkbox.setOnClickListener(null);
//获取商家条目是否选中状态
business_checkbox.setChecked(item.getBusinessChecked());
//子商品条目数据源
recycle_goods = helper.getView(R.id.recycle_goods);
List<JsonBean.DataBean.ListBean> list = item.getList();
LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
recycle_goods.setLayoutManager(manager);
//设置子条目适配器
final GoodsAdapter adapter = new GoodsAdapter(R.layout.goods_item, list);
recycle_goods.setAdapter(adapter);
//首先处理内部子条目控制外部条目
adapter.setOnGoodsItemClickListener(new GoodsAdapter.OnGoodsItemClickListener() {
@Override
public void onCallBack() {
//遍历获取所有子条目,只要有一个未勾选,商品类别也应该是未勾选
boolean result = true;
for (int i = 0; i < item.getList().size(); i++) {
result = result & item.getList().get(i).getGoodsChecked();
}
business_checkbox.setChecked(result);
//刷新适配器
adapter.notifyDataSetChanged();
//把最后的状态进行回传
onBusinessItemClickLisenter.onCallBack();
}
});
//然后外层的商品类别条目需要控制里面的商品条目
business_checkbox.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(business_checkbox.isChecked());
}
item.setBusinessChecked(business_checkbox.isChecked());
notifyDataSetChanged();
//把最后的状态进行回传
onBusinessItemClickLisenter.onCallBack();
}
});
}
}
//商品的adapter
public class GoodsAdapter extends BaseQuickAdapter<JsonBean.DataBean.ListBean,BaseViewHolder> {
OnGoodsItemClickListener onGoodsItemClickListener;
//接口回调
public interface OnGoodsItemClickListener{
public void onCallBack();
}
public void setOnGoodsItemClickListener(OnGoodsItemClickListener onGoodsItemClickListener) {
this.onGoodsItemClickListener = onGoodsItemClickListener;
}
public GoodsAdapter(int layoutResId, @Nullable List<JsonBean.DataBean.ListBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final JsonBean.DataBean.ListBean item) {
helper.setText(R.id.goods_name,item.getTitle());
helper.setText(R.id.goods_price,"¥"+item.getPrice());
//获取多选框的id(全选必须findbyid)
CheckBox goods_checkbox = helper.getView(R.id.goods_checkbox);
goods_checkbox.setOnClickListener(null);
goods_checkbox.setChecked(item.getGoodsChecked());
String imagesString = item.getImages();
String[] imagesStr = imagesString.split("\\|");
Glide.with(mContext).load(imagesStr[0]).into((ImageView) helper.getView(R.id.goods_image));
//以接口的方式把状态回传给外层
goods_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//Bean对象状态进行更新完毕
item.setGoodsChecked(isChecked);
onGoodsItemClickListener.onCallBack();
}
});
//加减器
Calculator calculator=helper.getView(R.id.calculator);
calculator.setOncalculatorListener(new Calculator.OncalculatorListener() {
@Override
public void jia(int number) {
//对新增的字段进行改动
item.setDefaultNumber(number);
onGoodsItemClickListener.onCallBack();
}
@Override
public void jian(int number) {
//对减少的字段进行改动
item.setDefaultNumber(number);
onGoodsItemClickListener.onCallBack();
}
});
}
}
//自定义view加减器
public class Calculator extends LinearLayout implements View.OnClickListener {
private Button jia;
private Button jian;
private TextView text_calculator;
private String numberstring;
public Calculator(Context context) {
super(context);
}
public Calculator(Context context, AttributeSet attrs) {
super(context, attrs);
View rootview = LayoutInflater.from(context).inflate(R.layout.calculator_item, this);
jia = rootview.findViewById(R.id.button_jia);
jian = rootview.findViewById(R.id.button_jian);
text_calculator = rootview.findViewById(R.id.text_calculator);
jia.setOnClickListener(this);
jian.setOnClickListener(this);
}
@Override
public void onClick(View v) {
numberstring = text_calculator.getText().toString();
int number = Integer.parseInt(numberstring);
switch (v.getId()){
case R.id.button_jia:
number=number+1;
text_calculator.setText(String.valueOf(number));
oncalculatorListener.jia(number);
break;
case R.id.button_jian:
number=number-1;
if (number<0){
number=0;
text_calculator.setText(String.valueOf(number));
}
text_calculator.setText(String.valueOf(number));
oncalculatorListener.jian(number);
break;
}
}
OncalculatorListener oncalculatorListener;
public interface OncalculatorListener{
public void jia(int number);
public void jian(int number);
}
public void setOncalculatorListener(OncalculatorListener oncalculatorListener){
this.oncalculatorListener=oncalculatorListener;
}
}
//切记一定要在bean类中写上checkbox的方法 和 加减器的初始化数量(private int defaultNumber=1;)