首先要展示列表 适配器嵌套适配器就不写了
主要的 先写一个加减器
Calculate
public class Calculate extends LinearLayout implements View.OnClickListener {
private final Button btn_add;
private final TextView tv_number;
private final Button btn_jian;
public Calculate(Context context, AttributeSet attrs) {
super(context, attrs);
View view = LayoutInflater.from(context).inflate(R.layout.aaa,this);
btn_jian = view.findViewById(R.id.jian);
tv_number = view.findViewById(R.id.number);
btn_add = view.findViewById(R.id.jia);
btn_add.setOnClickListener(this);
btn_jian.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String numberString = tv_number.getText().toString();
int number = Integer.parseInt(numberString);
switch (v.getId()){
case R.id.jian:
number--;
if (number<0){
number=0;
tv_number.setText(String.valueOf(number));
}
tv_number.setText(String.valueOf(number));
onNumberItemClickListener.jian(number);
break;
case R.id.jia:
number++;
tv_number.setText(String.valueOf(number));
onNumberItemClickListener.jia(number);
break;
}
}
//创建接口
OnNumberItemClickListener onNumberItemClickListener;
public void setOnNumberItemClickListener(OnNumberItemClickListener onNumberItemClickListener){
this.onNumberItemClickListener = onNumberItemClickListener;
}
public interface OnNumberItemClickListener{
public void jian(int number);
public void jia(int number);
}
public void setNum(int count){
tv_number.setText(count+"");
}
}
在子布局里面调用
<?xml version="1.0" encoding="utf-8"?>
<CheckBox
android:id="@+id/checkbox_goods"
android:layout_width="25dp"
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="30dp"
android:background="@drawable/selector_list"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_goods"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="10dp"
app:placeholderImage="@mipmap/ic_launcher_round"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp">
<TextView
android:id="@+id/text_goodsName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxEms="30"
android:singleLine="true"
android:text="名称"
android:textSize="12sp" />
<TextView
android:id="@+id/text_goodsPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="70dp"
android:text="价格"
android:textColor="#f00"
android:textSize="14sp" />
<com.example.tt0406.ui.weight.Calculate
android:id="@+id/caculete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginLeft="150dp"
>
</com.example.tt0406.ui.weight.Calculate>
</RelativeLayout>
</LinearLayout>
调用之后是这样 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190406204118358.png)
子适配器
public class ShopAdapter extends BaseQuickAdapter<Shop.DataBean.ListBean,BaseViewHolder> {
private Calculate caculete;
//创建接口
OnShopClickListener onShopClickListener;
public void OnShopClickListener(OnShopClickListener onShopClickListener){
this.onShopClickListener = onShopClickListener;
}
public interface OnShopClickListener{
public void onCallback();
}
public ShopAdapter(int layoutResId, @Nullable List<Shop.DataBean.ListBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final Shop.DataBean.ListBean item) {
helper.setText(R.id.text_goodsName,item.getTitle());
helper.setText(R.id.text_goodsPrice,item.getPrice()+"");
SimpleDraweeView simpleDraweeView = helper.getView(R.id.image_goods);
simpleDraweeView.setImageURI(item.getImages());
CheckBox checkbox_goods = helper.getView(R.id.checkbox_goods);
checkbox_goods.setOnClickListener(null);
checkbox_goods.setChecked(item.getGoodsChecked());
checkbox_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.setGoodsChecked(isChecked);
onShopClickListener.onCallback();
}
});
//加减器
caculete = helper.getView(R.id.caculete);
caculete.setOnNumberItemClickListener(new Calculate.OnNumberItemClickListener() {
@Override
public void jian(int number) {
item.setDefaultNumber(number);
onShopClickListener.onCallback();
}
@Override
public void jia(int number) {
item.setDefaultNumber(number);
onShopClickListener.onCallback();
}
});
}
}
主适配器
public class StoreAdapter extends BaseQuickAdapter<Shop.DataBean,BaseViewHolder> {
OnStoresClickListener onStoresClickListener;
public void OnStoresClickListener(OnStoresClickListener onStoresClickListener){
this.onStoresClickListener = onStoresClickListener;
}
public interface OnStoresClickListener{
public void onCallBack();
}
private RecyclerView recyclerView_store;
public StoreAdapter(int layoutResId, @Nullable List<Shop.DataBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, final Shop.DataBean item) {
helper.setText(R.id.store_name,item.getSellerName());
recyclerView_store = helper.getView(R.id.recyclerView_store);
List<Shop.DataBean.ListBean> beans = item.getList();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false);
recyclerView_store.setLayoutManager(linearLayoutManager);
final ShopAdapter shopAdapter = new ShopAdapter(R.layout.item_shop,beans);
recyclerView_store.setAdapter(shopAdapter);
//避免焦点抢站
final CheckBox check_store = helper.getView(R.id.check_store);
check_store.setOnCheckedChangeListener(null);
check_store.setChecked(item.getStoreChecked());
shopAdapter.OnShopClickListener(new ShopAdapter.OnShopClickListener() {
@Override
public void onCallback() {
boolean result = true;
for (int i=0;i<item.getList().size();i++){
result = result&item.getList().get(i).getGoodsChecked();
}
check_store.setChecked(result);
shopAdapter.notifyDataSetChanged();
onStoresClickListener.onCallBack();
}
});
check_store.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i=0;i<item.getList().size();i++){
item.getList().get(i).setGoodsChecked(check_store.isChecked());
}
item.setStoreChecked(check_store.isChecked());
notifyDataSetChanged();
onStoresClickListener.onCallBack();
}
});
}
}
主页面
public class FragShop extends Fragment implements ShopContract.ShopView,View.OnClickListener {
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.all)
CheckBox all;
@BindView(R.id.price)
TextView price;
@BindView(R.id.jie)
Button jie;
Unbinder unbinder;
private ShopContract.ShopPresenter shopPresenter;
private List<Shop.DataBean> beans;
private StoreAdapter storeAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag02, container, false);
Fresco.initialize(getActivity());
recyclerView = view.findViewById(R.id.recyclerView);
shopPresenter = new ShopPresenterImpl();
shopPresenter.attachView(this);
shopPresenter.requsetShopData();
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void showShopData(String message) {
all.setOnCheckedChangeListener(null);
all.setOnClickListener(this);
Gson gson = new Gson();
Shop shop = gson.fromJson(message, Shop.class);
beans = shop.getData();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
storeAdapter = new StoreAdapter(R.layout.item_store, beans);
recyclerView.setAdapter(storeAdapter);
storeAdapter.OnStoresClickListener(new StoreAdapter.OnStoresClickListener() {
@Override
public void onCallBack() {
boolean result = true;
for (int i = 0; i< beans.size(); i++){
boolean businessChecked = beans.get(i).getStoreChecked();
result = result&businessChecked;
for (int j = 0; j< beans.get(i).getList().size(); j++){
boolean goodChecked = beans.get(i).getList().get(j).getGoodsChecked();
result = result&goodChecked;
}
}
all.setChecked(result);
calculateTotalCount();
}
});
}
private void calculateTotalCount() {
double totalCount = 0;
//外层条目
for (int i = 0; i < beans.size(); i++) {
//内层条目
for (int j = 0; j < beans.get(i).getList().size(); j++) {
//判断内层条目是否勾选
if (beans.get(i).getList().get(j).getGoodsChecked() == true){
//获取商品数据*商品价格
double price = beans.get(i).getList().get(j).getPrice();
int defalutNumber = beans.get(i).getList().get(j).getDefaultNumber();
double goodsPrice = price * defalutNumber;
totalCount = totalCount+goodsPrice;
}
}
}
price.setText("合计:"+String.valueOf(totalCount));
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
public void onClick(View v) {
for (int i=0;i<beans.size();i++){
beans.get(i).setStoreChecked(all.isChecked());
for (int j=0;j<beans.get(i).getList().size();j++){
beans.get(i).getList().get(j).setGoodsChecked(all.isChecked());
}
storeAdapter.notifyDataSetChanged();
calculateTotalCount();
}
}
}
Bean包
public class Shop {
/**
* msg : 请求成功
* code : 0
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* list :
* sellerName : 商家1
* sellerid : 1
*/
private String sellerName;
private String sellerid;
private List<ListBean> list;
private boolean storeChecked;
public boolean getStoreChecked() {
return storeChecked;
}
public void setStoreChecked(boolean storeChecked) {
this.storeChecked = storeChecked;
}
public String getSellerName() {
return sellerName;
}
public void setSellerName(String sellerName) {
this.sellerName = sellerName;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* bargainPrice : 99
* createtime : 2017-10-14T21:38:26
* detailUrl : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
* images : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
* num : 2
* pid : 45
* price : 2999
* pscid : 39
* selected : 0
* sellerid : 1
* subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!
* title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机
*/
private double bargainPrice;
private String createtime;
private String detailUrl;
private String images;
private int num;
private int pid;
private int price;
private int pscid;
private int selected;
private int sellerid;
private String subhead;
private String title;
private boolean goodsChecked;
private int defaultNumber = 1;
public int getDefaultNumber() {
return defaultNumber;
}
public void setBargainPrice(double bargainPrice) {
this.bargainPrice = bargainPrice;
}
public void setDefaultNumber(int defaultNumber) {
this.defaultNumber = defaultNumber;
}
public boolean getGoodsChecked() {
return goodsChecked;
}
public void setGoodsChecked(boolean goodsChecked) {
this.goodsChecked = goodsChecked;
}
public double getBargainPrice() {
return bargainPrice;
}
public void setBargainPrice(int 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 int getPrice() {
return price;
}
public void setPrice(int 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;
}
}
}
}